gpt4 book ai didi

regex - 可以使用正则表达式检查增值税号的语法正确性吗?

转载 作者:行者123 更新时间:2023-12-01 18:13:50 27 4
gpt4 key购买 nike

我正在尝试找到一种验证欧洲增值税 ID 的方法。它们的长度各不相同,有时有校验和等。通常我使用正则表达式来验证简单的字符串 - 但这对我来说看起来非常复杂。

维基百科有一个不同语法的列表:

因此,在开始之前,浪费了大量时间并最终失败,我想从比我更频繁使用正则表达式的人那里知道是否可以预先验证这些数字。如果您认为正则表达式无法实现 VAT-ID 语法验证,请给我一个全面的示例,说明为什么不可以。

提前谢谢您。

注释:当然,我知道德国财政部的 XML-RPC 验证( https://evatr.bff-online.de/eVatR/xmlrpc/ ),但这有时需要几分钟才能收到请求的答复。此外,他们还会在柏林时间 23:00 至 05:00 期间中断此 XML-RPC 验证服务的运行。这就是为什么我想要进行两步验证:第一步是语法,第二步(由 cron 触发)使用此 XML-RPC。

最佳答案

有一个正则表达式可以验证 Regular Expressions Cookbook, 2nd edition, 4.21. European VAT Numbers section 中提供的 27 个欧盟国家的增值税号。 。

此正则表达式没有计算检查,但它仍然能够检查可能是欧盟增值税号的独立字符串。

在验证之前,您应该删除 [-.●][^A-Z0-9] 符号。然后,使用

(?xi)^(
(AT)?U[0-9]{8} | # Austria
(BE)?0[0-9]{9} | # Belgium
(BG)?[0-9]{9,10} | # Bulgaria
(HR)?[0-9]{11} | # Croatia
(CY)?[0-9]{8}[A-Z] | # Cyprus
(CZ)?[0-9]{8,10} | # Czech Republic
(DE)?[0-9]{9} | # Germany
(DK)?[0-9]{8} | # Denmark
(EE)?[0-9]{9} | # Estonia
(EL)?[0-9]{9} | # Greece
ES[A-Z][0-9]{7}(?:[0-9]|[A-Z]) | # Spain
(FI)?[0-9]{8} | # Finland
(FR)?[0-9A-Z]{2}[0-9]{9} | # France
(GB)?([0-9]{9}([0-9]{3})?|[A-Z]{2}[0-9]{3}) | # United Kingdom
(HU)?[0-9]{8} | # Hungary
(IE)?[0-9]{7}[A-Z]{1,2} | # Ireland
(IE)?[0-9][A-Z][0-9]{5}[A-Z] | # Ireland (2)
(IT)?[0-9]{11} | # Italy
(LT)?([0-9]{9}|[0-9]{12}) | # Lithuania
(LU)?[0-9]{8} | # Luxembourg
(LV)?[0-9]{11} | # Latvia
(MT)?[0-9]{8} | # Malta
(NL)?[0-9]{9}B[0-9]{2} | # Netherlands
(PL)?[0-9]{10} | # Poland
(PT)?[0-9]{9} | # Portugal
(RO)?[0-9]{2,10} | # Romania
(SE)?[0-9]{12} | # Sweden
(SI)?[0-9]{8} | # Slovenia
(SK)?[0-9]{10} # Slovakia
)$

请参阅regex demo

我在此处添加了克罗地亚增值税替代方案。

请注意,如果您希望出现国家/地区代码,请删除右圆括号后面的 ? 量词。

每当新国家加入欧盟或成员国更改增值税号规则时,正则表达式都需要更新。

请注意,食谱中的正则表达式与 Wiki 的爱尔兰增值税号定义不对应。

此外,无法使用正则表达式完全验证这一点,因为某些增值税号需要特定的数据,这些数据要么难以检索,要么应使用常规编程语言方法进行计算:

  • 法语前 2 位数字是“ key ”,法语 key 的计算方式如下:Key = [ 12 + 3 * ( SIREN modulo 97 ) ] modulo 97,例如: Key = [ 12 + 3 * ( 404,833,048 modulo 97 ) ] modulo 97 = [12 + 3*56] modulo 97 = 180 modulo 97 = 83 因此税号为 404,833,048FR 83,404,833,048 来源:www.insee.fr
  • 芬兰增值税最后一位数字是使用 MOD 11-2 的校验位
  • 意大利增值税有一个省 3 符号代码(索引 8、9、10)
  • 斯洛伐克增值税号必须能被 11 整除

关于regex - 可以使用正则表达式检查增值税号的语法正确性吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33625770/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com