Posted By

chupzzz on 06/14/11


Tagged

checksum


Versions (?)

INN number (Russia) checksum / Проверка валидности номера ИНН


 / Published in: PHP
 

URL: http://anton-pribora.ru/articles/php/php-javascript-inn/

Функция считает контрольную сумму для переданного аргумента.

(c) Anton Pribora http://anton-pribora.ru/articles/php/php-javascript-inn/

  1. /**
  2.  * Function checks INN for correct checksum.
  3.  *
  4.  * (c) Anton Pribora
  5.  * http://anton-pribora.ru/articles/php/php-javascript-inn/
  6.  *
  7.  * @param int $inn
  8.  * INN-number for check
  9.  * @return bool
  10.  */
  11. function is_valid_inn($inn) {
  12. if (preg_match('/\D/', $inn))
  13. return false;
  14.  
  15. $inn = (string) $inn;
  16. $len = strlen($inn);
  17.  
  18. if ($len === 10) {
  19. return $inn[9] === (string) (((
  20. 2 * $inn[0] + 4 * $inn[1] + 10 * $inn[2] +
  21. 3 * $inn[3] + 5 * $inn[4] + 9 * $inn[5] +
  22. 4 * $inn[6] + 6 * $inn[7] + 8 * $inn[8]
  23. ) % 11) % 10);
  24. } elseif ($len === 12) {
  25. $num10 = (string) (((
  26. 7 * $inn[0] + 2 * $inn[1] + 4 * $inn[2] +
  27. 10 * $inn[3] + 3 * $inn[4] + 5 * $inn[5] +
  28. 9 * $inn[6] + 4 * $inn[7] + 6 * $inn[8] +
  29. 8 * $inn[9]
  30. ) % 11) % 10);
  31.  
  32. $num11 = (string) (((
  33. 3 * $inn[0] + 7 * $inn[1] + 2 * $inn[2] +
  34. 4 * $inn[3] + 10 * $inn[4] + 3 * $inn[5] +
  35. 5 * $inn[6] + 9 * $inn[7] + 4 * $inn[8] +
  36. 6 * $inn[9] + 8 * $inn[10]
  37. ) % 11) % 10);
  38.  
  39. return $inn[11] === $num11 && $inn[10] === $num10;
  40. }
  41.  
  42. return false;
  43. }

Report this snippet  

You need to login to post a comment.