1

ロシアの税務登録番号 (VAT) を検証するために検証するコードを持っている人はいますか。C# コードは素晴らしいですが、誰かが他の言語を持っていれば、それも役に立ちます。

形式 (ロシアの VAT 番号 = "納税者番号" = "Идентификационный номер налогоплательщика"):

10桁(法人格)または12桁(人)、最初の2桁は出生地または会社登記(外国企業の場合、先頭の99の後の2桁)MOD 11-10

二度目の二車検(2004年以前は変わっていたが、今は残っている)。

法人格の場合は、変更可能な 2 番目のコード (KPP) を使用します。通常、最初の 4 桁は同じです (99 地域規則は適用されません)。通常、デフォルトは XXXX01001 です。

KPP もカウンター (下 3 桁)

KPP の数は、77 と 50 以外の地域での税務調査の数 (それぞれに 1 つだけ) に加えて、大企業の 1 つのコードに制限されています。

出典: http://en.wikipedia.org/wiki/VAT_identification_number#VAT_numbers_of_non-EU_countries

4

2 に答える 2

2

以下は、ロシアの個人および会社の VAT 番号を検証する C# プログラムです。さらに入力の検証を行う必要があることを考慮してください (渡された VAT 番号に数字のみが含まれていること、必要な長さがあることなどを検証します):

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

EU(およびロシア人も)のVAT番号をサポートしています。

(jsvat チェックの VAT 番号を 2 回 - 正規表現と数学計算を使用)

于 2015-11-24T20:33:59.963 に答える