通过ARES/VIES验证增值税号
项目描述
验证增值税登记号
本模块用于验证欧盟的增值税登记号和捷克共和国的增值税识别号。该模块用于Django Verify VAT registration number模块,然后用于DjangoCMS Verify VAT registration number模块。
VIES
VIES增值税号验证(欧盟)。它是一种电子方式,用于验证欧盟内注册的经济操作者的增值税识别号,用于跨境货物或服务的交易。
支持的国家
AT - Austria
BE - Belgium
BG - Bulgaria
CY - Cyprus
CZ - Czechia
DE - Germany
DK - Denmark
EE - Estonia
EL - Greece
ES - Spain
FI - Finland
FR - France
HR - Croatia
HU - Hungary
IE - Ireland
IT - Italy
LT - Lithuania
LU - Luxembourg
LV - Latvia
MT - Malta
NL - The Netherlands
PL - Poland
PT - Portugal
RO - Romania
SE - Sweden
SI - Slovenia
SK - Slovakia
XI - Northern Ireland
ARES
ARES - Access to Registers of Economic Subjects / Entities是一个信息系统,允许检索在捷克共和国注册的经济实体的信息。该系统介于特定政府行政机构(称为源注册)的数据展示之间,这些数据存储在这些注册中。
安装
此库可在PyPI上找到,建议使用pip
进行安装
pip install verify-vat-number
使用
from verify_vat_number.ares import get_from_cz_ares
from verify_vat_number.vies import get_from_eu_vies
from verify_vat_number.exceptions import VatNotFound, VerifyVatException, UnsupportedCountryCode
def dump_reg(vat):
print('\nVAT-REG-NUM:', vat)
try:
data = get_from_eu_vies(vat)
except VatNotFound:
print("VAT not found for", vat)
except UnsupportedCountryCode as err:
print("Unsupported country code:", err)
except VerifyVatException as err:
print(err)
print(err.source)
else:
print(data)
def dump_vid(ic):
print('\nVAT-ID-NUM:', ic)
try:
data = get_from_cz_ares(ic)
except VatNotFound:
print("IC not found for", ic)
except VerifyVatException as err:
print(err)
print(err.source)
else:
print(data)
for vat in ("CZ67985726", "DE306401413", "SK2020317068", "CZ67985728", "BE0404616494", "BE0400853488", "BG127015636", "XX67985726"):
dump_reg(vat)
for ic in ("67985726", "67985728", "456456456"):
dump_vid(ic)
VAT-REG-NUM: CZ67985726
VerifiedCompany(
company_name='CZ.NIC, z.s.p.o.',
address='Milešovská 1136/5\nPRAHA 3 - VINOHRADY\n130 00 PRAHA 3',
street_and_num='Milešovská 1136/5',
city='PRAHA 3',
postal_code='130 00',
district='PRAHA 3 - VINOHRADY',
country_code='CZ',
legal_form=None
)
VAT-REG-NUM: DE306401413
VerifiedCompany(
company_name='',
address=None,
street_and_num=None,
city=None,
postal_code=None,
district=None,
country=None,
legal_form=None
)
VAT-REG-NUM: SK2020317068
VerifiedCompany(
company_name='ESET, spol. s r.o.',
address='Einsteinova 24\n85101 Bratislava - mestská časť Petržalka\nSlovensko',
street_and_num='Einsteinova 24',
city='Bratislava - mestská časť Petržalka',
postal_code='85101',
district=None,
country_code='SK',
legal_form=None
)
VAT-REG-NUM: CZ67985728
VAT not found for CZ67985728
VAT-REG-NUM: BE0404616494
VerifiedCompany(
company_name='NV ACKERMANS & VAN HAAREN',
address='Begijnenvest 113\n2000 Antwerpen',
street_and_num='Begijnenvest 113',
city='Antwerpen',
postal_code='2000',
district=None,
country_code='BE',
legal_form=None
)
VAT-REG-NUM: BE0400853488
VerifiedCompany(
company_name='NV BRUSSELS AIRLINES',
address='Ringbaan 26\n1831 Machelen (Brab.)',
street_and_num='Ringbaan 26',
city='Machelen (Brab.)',
postal_code='1831',
district=None,
country_code='BE',
legal_form=None
)
VAT-REG-NUM: BG127015636
VerifiedCompany(
company_name='КАРЛСБЕРГ БЪЛГАРИЯ - АД',
address='жк МЛАДОСТ 4БИЗНЕС ПАРК СОФИЯ №1 бл.сграда 10 ет.4 обл.СОФИЯ, гр.СОФИЯ 1715',
street_and_num='жк МЛАДОСТ 4БИЗНЕС ПАРК СОФИЯ №1 бл.сграда 10 ет.4 обл.СОФИЯ',
city='гр.СОФИЯ',
postal_code='1715',
district=None,
country_code='BG',
legal_form=None
)
VAT-REG-NUM: XX67985726
Unsupported country code: XX
VAT-ID-NUM: 67985726
VerifiedCompany(
company_name='CZ.NIC, z.s.p.o.',
address='Milešovská 1136/5\n13000 Praha 3',
street_and_num='Milešovská 1136/5',
city='Praha 3',
postal_code='13000',
district='Praha 3 - Vinohrady',
country_code='CZ',
legal_form=751
)
VAT-ID-NUM: 67985728
IC not found for 67985728
VAT-ID-NUM: 456456456
The number cannot be more than 8 digits long.
None
与日志记录一起工作
import sys
import logging
from verify_vat_number.ares import get_from_cz_ares
from verify_vat_number.vies import get_from_eu_vies
from verify_vat_number.exceptions import VatNotFound
logger = logging.getLogger('verify_vat_number.vies')
logger.addHandler(logging.StreamHandler(sys.stdout))
logger.setLevel(logging.DEBUG)
get_from_eu_vies("CZ67985726")
https://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl Country code: CZ VAT: 67985726
<ns0:Envelope
xmlns:ns0="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ns1="urn:ec.europa.eu:taxud:vies:services:checkVat:types">
<ns0:Body>
<ns1:checkVat>
<ns1:countryCode>CZ</ns1:countryCode>
<ns1:vatNumber>67985726</ns1:vatNumber>
</ns1:checkVat>
</ns0:Body>
</ns0:Envelope>
<ns0:Envelope
xmlns:ns0="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ns1="urn:ec.europa.eu:taxud:vies:services:checkVat:types">
<ns0:Body>
<ns1:checkVatResponse>
<ns1:countryCode>CZ</ns1:countryCode>
<ns1:vatNumber>67985726</ns1:vatNumber>
<ns1:requestDate>2022-05-20+02:00</ns1:requestDate>
<ns1:valid>true</ns1:valid>
<ns1:name>CZ.NIC, z.s.p.o.</ns1:name>
<ns1:address>Milešovská 1136/5
PRAHA 3 - VINOHRADY
130 00 PRAHA 3</ns1:address>
</ns1:checkVatResponse>
</ns0:Body>
</ns0:Envelope>
VerifiedCompany(
company_name='CZ.NIC, z.s.p.o.',
address='Milešovská 1136/5\n13000 Praha 3',
street_and_num='Milešovská 1136/5',
city='Praha 3',
postal_code='13000',
district='Praha 3 - Vinohrady',
country_code='CZ',
legal_form=None
)
logger = logging.getLogger('verify_vat_number.ares')
logger.addHandler(logging.StreamHandler(sys.stdout))
logger.setLevel(logging.DEBUG)
try:
get_from_cz_ares("67985728")
except VatNotFound:
print('VAT not found.')
https://ares.gov.cz/ekonomicke-subjekty-v-be/rest/ekonomicke-subjekty/67985728/
VAT not found.
多个ARES输出:经济实体/公共登记
get_from_cz_ares
函数是对各个寄存器的总称函数。目前它包括经济实体(get_from_cz_ares_ee
)和公共登记册(get_from_cz_ares_vr
)。默认是经济实体。使用 register_type
属性并具有 RegisterType.PUBLIC_REGISTER
值返回公共登记册的数据。公共登记册包含关于著名治理机构所有者和成员的信息。
from verify_vat_number.ares import get_from_cz_ares, get_from_cz_ares_vr, RegisterType
get_from_cz_ares("67985726", RegisterType.PUBLIC_REGISTER)
# or
get_from_cz_ares_vr("67985726")
VerifiedCompanyPublicRegister(
company_name='CZ.NIC, z.s.p.o.',
address='Milešovská 1136/5\n13000 Praha 3',
street_and_num='Milešovská 1136/5', city='Praha 3',
postal_code='13000', district='Praha 3 - Vinohrady',
country_code='CZ',
company_entities=[
CompanyEntity(
entity_type=<CompanyEntityType.GOVERNING_BODY: 'Statutární orgán'>,
name='Statutární orgán - Představenstvo',
members=[
Member(
role=<MemberRoleType.STATUTORY_BODY_MEMBER: 'STATUTARNI_ORGAN_CLEN'>,
identity=NaturalPerson(
first_name='Josef',
last_name='Novák',
date_of_birth=datetime.date(1992, 11, 8))),
Member(
role=<MemberRoleType.STATUTORY_BODY_MEMBER: 'STATUTARNI_ORGAN_CLEN'>,
identity=NaturalPerson(
first_name='Jana',
last_name='Novotná',
date_of_birth=datetime.date(1962, 9, 17))),
Member(
role=<MemberRoleType.STATUTORY_BODY_MEMBER: 'STATUTARNI_ORGAN_CLEN'>,
identity=NaturalPerson(
first_name='Karel',
last_name='Svoboda',
date_of_birth=datetime.date(1981, 12, 3))),
Member(
role=<MemberRoleType.STATUTORY_BODY_MEMBER: 'STATUTARNI_ORGAN_CLEN'>,
identity=NaturalPerson(
first_name='Hana',
last_name='Horáková',
date_of_birth=datetime.date(1974, 4, 12))),
Member(
role=<MemberRoleType.STATUTORY_BODY_MEMBER: 'STATUTARNI_ORGAN_CLEN'>,
identity=NaturalPerson(
first_name='Jiří',
last_name='Dvořák',
date_of_birth=datetime.date(1978, 6, 21)))
]),
CompanyEntity(
entity_type=<CompanyEntityType.OTHER: 'Jiný orgán'>,
name='Kontrolní orgán - Dozorčí rada',
members=[
Member(
role=<MemberRoleType.AUDIT_COMMITTEE_MEMBER: 'KONTROLNI_KOMISE_CLEN'>,
identity=NaturalPerson(
first_name='Eva',
last_name='Kopecká',
date_of_birth=datetime.date(1982, 8, 12))),
Member(
role=<MemberRoleType.AUDIT_COMMITTEE_MEMBER: 'KONTROLNI_KOMISE_CLEN'>,
identity=NaturalPerson(
first_name='Milan',
last_name='Dostál',
date_of_birth=datetime.date(1985, 7, 10))),
Member(
role=<MemberRoleType.AUDIT_COMMITTEE_MEMBER: 'KONTROLNI_KOMISE_CLEN'>,
identity=NaturalPerson(
first_name='Jan',
last_name='Beneš',
date_of_birth=datetime.date(1952, 11, 12)))
])
],
legal_form=751
)
ARES - 各种登记册
ARES 数据来源于多个来源。目前已实现了两个
- 经济实体
- 公共登记册
通过 get_from_cz_ares_ee(VAT)
函数获取经济实体,这与调用 get_from_cz_ares(VAT)
函数相同。公共登记册的数据由 get_from_cz_ares_vr(VAT)
函数提供,这与调用 get_from_cz_ares(VAT, RegisterType.PUBLIC_REGISTER)
函数几乎相同。区别在于,如果公共登记册中找不到数据,则从默认的登记册经济实体返回数据。因此,get_from_cz_ares_ee
函数可能会抛出 VatNotFound
异常,而 get_from_cz_ares
函数将返回公司记录,但当然,没有实体。
ARES - 实体中人的小写姓名
遗憾的是,ARES 公共登记册返回的是大写字母的人名。程序将它们转换回小写。如果您希望保留原始数据,可以禁用此转换的 ARES_KEEP_CASE
环境变量。
python -c 'from verify_vat_number.ares import get_from_cz_ares_vr;print(get_from_cz_ares_vr("67985726"))'
VerifiedCompanyPublicRegister(
company_name='CZ.NIC, z.s.p.o.',
...
company_entities=[
CompanyEntity(entity_type=<CompanyEntityType.GOVERNING_BODY: 'Statutární orgán'>, name='Statutární orgán',
members=[
Member(
role=<MemberRoleType.STATUTORY_BODY_MEMBER: 'STATUTARNI_ORGAN_CLEN'>,
identity=NaturalPerson(first_name='Josef', last_name='Novák', ...)),
...
...
)
ARES_KEEP_CASE=y python -c 'from verify_vat_number.ares import get_from_cz_ares_vr;print(get_from_cz_ares_vr("67985726"))'
VerifiedCompanyPublicRegister(
company_name='CZ.NIC, z.s.p.o.',
...
company_entities=[
CompanyEntity(entity_type=<CompanyEntityType.GOVERNING_BODY: 'Statutární orgán'>, name='Statutární orgán',
members=[
Member(
role=<MemberRoleType.STATUTORY_BODY_MEMBER: 'STATUTARNI_ORGAN_CLEN'>,
identity=NaturalPerson(first_name='JOSEF', last_name='NOVÁK', ...)),
...
...
)
许可证
项目详情
verify-vat-number-2.0.0.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 86373b4e14383d9c36b519ca8c98b8ea9594fed03e405812380322edcb81fc7a |
|
MD5 | 729a3573b787989672b3574e100652a8 |
|
BLAKE2b-256 | 62cb54866571e13aef6a703d59c9763bf46aa17f37824807fd91e8fa7887258c |
verify_vat_number-2.0.0-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 42ebe6a2c83164fa14bf434c04f69eb931ba4e47423b036ae73c5a1bf3ccf060 |
|
MD5 | 38437edbe7fd8b7bfa7e853715e6bc7f |
|
BLAKE2b-256 | 1a1f7775ba0e6f191440c85a4f9c044cef7ed4dfa680c44a844988dd7998befb |