2012-11-27 152 views
1

有没有人有验证俄罗斯税务注册号(VAT)的验证码。 C#代码将非常棒,但如果有人有其他语言,它也会有帮助。俄罗斯增值税号码验证

格式(俄罗斯增值税号码= “税号”= “Идентификационныйномерналогоплательщика”):

10位(法人)或12位(人的人),拳头两个数字是区域出生或公司注册(外国公司,前99后两位数)MOD 11-10

第二次检查(在2004年之前,它改变了,现在停留)。

法律人格使用可变第二代码(KPP),通常前4位数字相同(99区域规则不适用),通常为默认值XXXX01001。

KPP也是计数器(最后3个digts)

KPP的数量是有限的,以比77和50(一个也是唯一一个)加上最大的公司之一,代码等地区税务检查次数。

来源:http://en.wikipedia.org/wiki/VAT_identification_number#VAT_numbers_of_non-EU_countries

+0

你需要告诉我们什么是有效的格式之前,人们会帮助你。 – ZombieSheep

+0

尝试给出这些数字的例子并描述适用于格式化的规则。 –

+0

当然,寻找*现有*代码来做到这一点的关键在于它已经体现了俄罗斯增值税号码的具体规定。好的,所以这不适用于所有提问者,但可以想象,buda确实知道如何编程,并且能够在没有帮助的情况下从头开始。对我来说,问题的关键在于不要从头开始。 –

回答

1

这里是一个C#程序,将验证俄罗斯个人和公司的增值税号。请考虑进一步输入验证应该做的(验证传递的增值税数字只包含数字,他们有需要的长度等):

using System; 
using System.Linq; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     class VatNumber 
     { 
      private int[] _numericVatNumber; 
      public int[] NumericVatNumber { get { return _numericVatNumber; } } 

      public VatNumber(string vatNumber) 
      { 
       _numericVatNumber = vatNumber.ToCharArray().Select(i => int.Parse(i.ToString())).ToArray(); 
      } 

      public virtual bool IsValid(){return false;} 
     } 

     class PersonalVatNumber : VatNumber 
     { 
      public override bool IsValid() 
      { 
       var n10 = ((2 * NumericVatNumber[0] + 
          4 * NumericVatNumber[1] + 
          10 * NumericVatNumber[2] + 
          3 * NumericVatNumber[3] + 
          5 * NumericVatNumber[4] + 
          9 * NumericVatNumber[5] + 
          4 * NumericVatNumber[6] + 
          6 * NumericVatNumber[7] + 
          8 * NumericVatNumber[8]) % 11) % 10; 
       if (n10 == NumericVatNumber.Last()) 
        return true; 
       return false; 
      } 

      public PersonalVatNumber(string vatNumber) 
       : base(vatNumber) 
      { 

      } 
     } 

     class CompanyVatNumber : VatNumber 
     { 
      public override bool IsValid() 
      { 
       var n11 = ((7 * NumericVatNumber[0] + 
          2 * NumericVatNumber[1] + 
          4 * NumericVatNumber[2] + 
          10 * NumericVatNumber[3] + 
          3 * NumericVatNumber[4] + 
          5 * NumericVatNumber[5] + 
          9 * NumericVatNumber[6] + 
          4 * NumericVatNumber[7] + 
          6 * NumericVatNumber[8] + 
          8 * NumericVatNumber[9] 
          ) % 11) % 10; 
           if (n11 != NumericVatNumber[10]) 
        return false; 
       var n12 = ((3 * NumericVatNumber[0] + 
          7 * NumericVatNumber[1] + 
          2 * NumericVatNumber[2] + 
          4 * NumericVatNumber[3] + 
          10 * NumericVatNumber[4] + 
          3 * NumericVatNumber[5] + 
          5 * NumericVatNumber[6] + 
          9 * NumericVatNumber[7] + 
          4 * NumericVatNumber[8] + 
          6 * NumericVatNumber[9] + 
          8 * NumericVatNumber[10] 
          ) % 11) % 10; 

       if (n12 == NumericVatNumber.Last()) 
        return true; 
       return false; 
      } 

      public CompanyVatNumber(string vatNumber) 
       : base(vatNumber) 
      { 

      } 
     } 

     static void Main(string[] args) 
     { 
      var companyVat = new CompanyVatNumber("123456789047"); 
      Console.WriteLine(companyVat.IsValid()); 

      var personalVat = new PersonalVatNumber("1234567894"); 
      Console.WriteLine(personalVat.IsValid()); 

     } 
    } 
} 
0

如果它是你的选择,你可以使用JS LIB (我也是):

https://github.com/se-panfilov/jsvat

它支持欧盟(和俄罗斯太)增值税号码。

(jsvat检查的增值税数量的两倍 - 用正则表达式,并用数学计算)