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]); } } |
Ciekawe rozwiązanie. jeżeli potrzebujesz przetestowanych walidatorów NIPU, REGONU, PESELU itp. to zapraszam na blog:
http://mvc.emailer.pl
Pozdrawiam
Ciekawy artykul!
Ja jeszcze dorzucę fajny generator danych testowych:
http://generatory.it
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
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
W linii 16 jest błąd, zmienna sregon nie istnieje