希腊增值税验证号码

时间:2010-12-07 10:16:32

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

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

3 个答案:

答案 0 :(得分:2)

如前所述[{3}},您将无法获得完整的验证,因为“欧盟委员会无法透露这些算法”。但希腊增值税必须有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

答案 1 :(得分:2)

这不是欧盟法律规定的9位数,取决于国家。

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

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

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

答案 2 :(得分:1)

我发现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;
}

但是只检查它是否采用有效格式,而不是实际分配了数字。如上所述,您可以使用Web服务:

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