是否有人可以帮助我使用VB.NET visual studio 2010中的代码来验证希腊税务登记号(VAT)。
答案 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服务:
checkVatPortTypeClient
client.checkVat
。您需要将国家/地区代码和增值税号码放入字符串变量中以供参考,并为验证标志,公司名称和地址提供输出变量。