【问题标题】:Greek VAT validation number code希腊增值税验证号代码
【发布时间】:2010-12-07 10:16:31
【问题描述】:

有没有人可以帮助我使用 VB.NET Visual Studio 2010 中的代码来验证希腊税务登记号 (VAT)。

【问题讨论】:

  • 验证的规则是什么?你有参考吗?
  • 不,这是第一个问题,我不知道规则,我只知道这是欧洲法律规定的 9 位数字
  • 如果涉及到,有一个可以使用的网络服务ec.europa.eu/taxation_customs/vies/checkVatService.wsdl
  • @Rup 你能帮我如何使用这项服务吗?
  • ho1 链接到使用它的 CodeProject 项目,尽管在 C# codeproject.com/KB/webservices/VATchecker.aspx 中,或者您可以在 Visual Studio 中右键单击您的项目并“添加服务引用”以生成一个类包装器那个网址。然后您实例化生成的客户端类,然后您可以调用的类上应该有一个“checkVat”方法。

标签: .net windows vb.net visual-studio-2010


【解决方案1】:

9 位数不是欧盟法律,这取决于国家/地区。

很遗憾,我不知道您是否可以在任何地方获得该算法,即使您可以,但这并不意味着它是一个有效的增值税号。我知道确保它是有效增值税号的唯一方法是根据 Rup 评论中提到的网络服务对其进行验证。因此,如果您要使用此验证来决定是否要收取增值税,我不会只相信一个计算,因为那时您可能最终会违反规则(并且可能不得不支付您没有缴纳的增值税) '不收集...)。

有一篇代码项目文章展示了如何使用它(C#,但如果需要,应该相对容易转换为 VB.Net):VIES - VAT number checker

虽然显然值得首先检查 9 位数字以排除任何明显无效的数字。

【讨论】:

  • 是的 ho1,这将是我将为它做的第一次验证,但我还需要验证 VIES 以确保输入的数字是有效的。我会看看我能用那个“增值税号码检查器”做什么
  • @Lefteris:如果您转到 Tim 的答案中的链接,它是 VIES 网络服务的常见问题解答列表,因此可能也值得一读。
  • 嗯,有一个在线验证网站,但我想在我的 vb 代码中使用这个验证,它为 Windows 应用程序实现它。是的,我知道这些常见问题解答,但它们对我想做的事情没有帮助
  • @Lefteris:只要您的 Windows 应用程序可以访问互联网,您就应该能够从您的应用程序中使用 Web 服务。主要问题是,如常见问题解答之一所述,如果 web 服务关闭,您将无法验证,直到它再次启动,并且如果您需要验证大量增值税号,它可能是慢,因为你需要一次做一个。
  • 好吧@Rup 我希望有能力给你不止一票。您的解决方案是我考虑的首要问题。我将类作为 DLL 并导入到我的解决方案中,然后我从那里开始工作。是的,这就是我真正想要的,非常感谢
【解决方案2】:

正如here 所提到的,您不会得到完整的验证,因为“欧盟委员会不能泄露这些算法”。然而,希腊增值税必须有一个 9 位数字块。 所以用正则表达式检查就足够了:

Dim text As String = Me.TxtVAT.Text
Dim regex As New System.Text.RegularExpressions.Regex("^\d{9}$", System.Text.RegularExpressions.RegexOptions.Compiled)
If regex.IsMatch(text) Then
   'do something'
Else
   'do something else'
End If

【讨论】:

  • 我认为蒂姆您正在从比较两个文本字段中获取结果,如果我对此正确,那么这不是我想要的。如果满足 VIES 的所有要求,我正在寻找的是对所有数字的验证。我认为这将是一个数学验证。
【解决方案3】:

我发现 a JavaScript implementation of the checksum algorithm 引用 this site 作为原始算法来源:

function ELVATCheckDigit (vatnumber) {
  // Checks the check digits of a Greek VAT number.

  var total = 0;
  var multipliers = [256,128,64,32,16,8,4,2];

  //eight character numbers should be prefixed with an 0.
  if (vatnumber.length == 8) {vatnumber = "0" + vatnumber};

  // Extract the next digit and multiply by the counter.
  for (var i = 0; i < 8; i++)
    total = total + Number(vatnumber.charAt(i)) * multipliers[i];

  // Establish check digit.
  total = total % 11;
  if (total > 9) {total = 0;};  

  // Compare it with the last character of the VAT number. If it is the same, 
  // then it's a valid check digit.
  if (total == vatnumber.slice (8,9)) 
    return true
  else 
    return false;
}

但这只会检查它的格式是否有效,而不是是否实际分配了数字。如上所述,您可以为此使用网络服务:

  • 右键单击您的项目并“添加服务引用”;输入 URL http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl 和命名空间名称
  • 从该命名空间实例化 checkVatPortTypeClient
  • 致电client.checkVat。您需要将国家代码和增值税号放入字符串变量中以供参考,并为验证标志、公司名称和地址提供输出变量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-12
    • 2019-09-25
    • 1970-01-01
    • 2022-01-05
    相关资源
    最近更新 更多