Walidacja numeru NIP/Regon

Witam,

Po długiej przerwie zamieszczam kod sprawdzający poprawność numeru NIP oraz REGON.

Życzę przyjemnego korzystania.

static public bool RegonValidate(string RegonValidate)
 {
 byte[] weights;
 ulong regon = ulong.MinValue;
 byte[] digits;
 
 if (ulong.TryParse(RegonValidate,out regon).Equals(false)) return false;
 
 switch( RegonValidate.Length )
 {
 case 7:
 weights = new byte[] { 2, 3, 4, 5, 6, 7 };
 break;
 
 case 9:
 weights = new byte[] { 8, 9, 2, 3, 4, 5, 6, 7 };
 break;
 
 case 14:
 weights = new byte[] { 2, 4, 8, 5, 0, 9, 7, 3, 6, 1, 2, 4, 8 };
 break;
 
 default:
 return false;
 }
 
 string sRegon = regon.ToString();
 digits = new byte[sRegon.Length];
 
 for (int i=0;i<sregon .Length;i++)
 {
 if (byte.TryParse(sRegon[i].ToString(), out digits[i]).Equals(false)) return false;
 }
 
 int checksum = 0;
 
 for(int i=0;i<weights.Length;i++)
 {
 checksum += weights[i] * digits[i];
 }
 
 return (checksum % 11 % 10).Equals(digits[digits.Length-1]);
 
 }
 
static public bool NIPValidate(string NIPValidate)
 {
 const byte lenght = 10;
 
 ulong nip = ulong.MinValue;
 byte[] digits;
 byte[] weights = new byte[] { 6, 5, 7, 2, 3, 4, 5, 6, 7 };
 
 if (NIPValidate.Length.Equals(lenght).Equals(false)) return false;
 
 if (ulong.TryParse(NIPValidate,out nip).Equals(false)) return false;
 else
 {
 string sNIP = NIPValidate.ToString();
 digits = new byte[lenght];
 
 for (int i = 0; i < lenght; i++)
 {
 if (byte.TryParse(sNIP[i].ToString(), out digits[i]).Equals(false)) return false;
 }
 
 int checksum = 0;
 
 for (int i = 0; i < lenght - 1; i++)
 {
 checksum += digits[i] * weights[i];
 }
 
 return (checksum % 11 % 10).Equals(digits[digits.Length-1]);
 }
 
 }

Ten wpis został opublikowany w kategorii Blog. Dodaj zakładkę do bezpośredniego odnośnika.

4 odpowiedzi na „Walidacja numeru NIP/Regon

  1. rpiatek pisze:

    Ciekawe rozwiązanie. jeżeli potrzebujesz przetestowanych walidatorów NIPU, REGONU, PESELU itp. to zapraszam na blog:

    http://mvc.emailer.pl

    Pozdrawiam

  2. Maciek M pisze:

    Ciekawy artykul!
    Ja jeszcze dorzucę fajny generator danych testowych:
    http://generatory.it

  3. A ja wrzucę nie inną implementację dzięki której widać czym różni się walidacja poszczególnych kodów 🙂
    https://gist.github.com/sulmar/d89a29e0e80c876b8216c14146f52fcd

  4. A ja wrzucę inną implementację dzięki której widać czym różni się walidacja poszczególnych kodów
    https://gist.github.com/sulmar/d89a29e0e80c876b8216c14146f52fcd

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *