1

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

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

10位(法人)或12位(人),前两位为出生地或公司注册地(外国公司,前导99后两位) MOD 11-10

第二次两次检查(2004年之前,它改变了,现在保持不变)。

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

KPP 也是计数器(最后 3 位)

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

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

4

2 回答 2

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());

        }
    }
}
于 2012-11-27T21:51:53.110 回答
0

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

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

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

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

于 2015-11-24T20:33:59.963 回答