俄罗斯增值税号验证

时间:2012-11-27 09:20:33

标签: c# .net algorithm validation

是否有人有验证俄罗斯税务登记号码(VAT)的验证码。 C#代码会很棒,但是如果某人有其他语言,它也会很有帮助。

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

  

10位数(法定人格)或12位数(人称),第二位数字是出生地或公司注册地(外国公司,领先99后两位数)MOD 11-10

     

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

     

对于法人资格使用可更改的第二个代码(KPP),通常前4位数字相同(99区域规则不适用),通常默认为XXXX01001。

     

KPP也是柜台(最后3个挖掘)

     

KPP的数量仅限于77和50以外地区(一个且仅限于每个)的税务检查数量加上最大公司的一个代码。

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

2 个答案:

答案 0 :(得分:2)

这是一个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());

        }
    }
}

答案 1 :(得分:0)

如果它是您的选项,您可以使用js lib(我也是):

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

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

(jsvat检查增值税号码两次 - 使用正则表达式和数学计算)