ExtensionMethod.NET Home of 880 C#, Visual Basic, F# and Javascript extension methods

IsValidNIP, IsValidREGON, IsValidPESEL

Validation algorithms for Polish identification numbers NIP, REGON & PESEL.

Source

public static class Validators
{
    public static bool IsValidNIP(this string input)
    {
        int[] weights = { 6, 5, 7, 2, 3, 4, 5, 6, 7 };
        bool result = false;
        if (input.Length == 10)
        {
            int controlSum = CalculateControlSum(input, weights);
            int controlNum = controlSum % 11;
            if (controlNum == 10)
            {
                controlNum = 0;
            }
            int lastDigit = int.Parse(input[input.Length - 1].ToString());
            result = controlNum == lastDigit;
        }
        return result;
    }

    public static bool IsValidREGON(this string input)
    {
        int controlSum;
        if (input.Length == 7 || input.Length == 9)
        {
            int[] weights = { 8, 9, 2, 3, 4, 5, 6, 7 };
            int offset = 9 - input.Length;
            controlSum = CalculateControlSum(input, weights, offset);
        }
        else if (input.Length == 14)
        {
            int[] weights = { 2, 4, 8, 5, 0, 9, 7, 3, 6, 1, 2, 4, 8 };
            controlSum = CalculateControlSum(input, weights);
        }
        else
        {
            return false;
        }
            
        int controlNum = controlSum % 11;
        if (controlNum == 10)
        {
            controlNum = 0;
        }
        int lastDigit = int.Parse(input[input.Length - 1].ToString());

        return controlNum == lastDigit;
    }

    public static bool IsValidPESEL(this string input)
    {
        int[] weights = { 1, 3, 7, 9, 1, 3, 7, 9, 1, 3 };
        bool result = false;
        if (input.Length == 11)
        {
            int controlSum = CalculateControlSum(input, weights);
            int controlNum = controlSum % 10;
            controlNum = 10 - controlNum;
            if (controlNum == 10)
            {
                controlNum = 0;
            }
            int lastDigit = int.Parse(input[input.Length - 1].ToString());
            result = controlNum == lastDigit;
        }
        return result;
    }

    private static int CalculateControlSum(string input, int[] weights, int offset = 0)
    {
        int controlSum = 0;
        for (int i = 0; i < input.Length - 1; i++)
        {
            controlSum += weights[i + offset] * int.Parse(input[i].ToString());
        }
        return controlSum;
    }
}

Example

string nip = "1234567890";
string regon = "123456789";
string pesel = "12345678901";

Console.WriteLine(nip.IsValidNIP() ? "NIP is valid" : "NIP is not valid");
Console.WriteLine(regon.IsValidREGON() ? "REGON is valid" : "REGON is not valid");
Console.WriteLine(pesel.IsValidPESEL() ? "PESEL is valid" : "PESEL is not valid");

Author: Marcin Kozub

Submitted on: 22 mrt. 2012

Language: C#

Type: System.String

Views: 10154