fork download
  1. <?php
  2. function do_universal_inn_check($inn) {
  3. if(!is_numeric($inn)) return false;
  4. $weights = array(3,7,2,4,10,3,5,9,4,6,8,0);
  5. $chr = str_split((string)$inn);
  6. switch (strlen($inn)) {
  7. case 12:
  8. //do first 11 digits cksum
  9. $cksum_one = 0;
  10. for($i=0;$i<11;$i++) $cksum_one += $weigths[$i+1] * $chr[$i];
  11. $cksum_one %= 11;
  12. if($cksum_one > 9) $cksum_one %= 10;
  13. //do entire INN
  14. $cksum_two = 0;
  15. for($i=0;$i<12;$i++) $cksum_two += $weights[$i] * $chr[$i];
  16. $cksum_two %= 11;
  17. if($cksum_two > 9) $cksum_two %= 10;
  18. return (((int)$chr[10] === (int)$cksum_one) && ((int)$chr[11] === (int)$cksum_two)) ? true : false;
  19. break;
  20. case 10:
  21. $cksum = 0;
  22. for($i=0;$i<10;$i++) $cksum += (int)$weights[$i+2] * (int)$chr[$i];
  23. $cksum %= 11;
  24. if($cksum > 9) $cksum %= 9;
  25. return ((int)$chr[9] === (int)$cksum) ? true : false;
  26. break;
  27. default:
  28. // ne byvaet takih INN SOOKAA
  29. return false;
  30. break;
  31. }
  32.  
  33. return false;
  34. }
  35.  
  36. // test
  37. // invalid 10 int inn
  38. echo var_dump(do_universal_inn_check(7743013902));
  39. // valid VEKTOR LTD LPP PZDC GMBH
  40. echo var_dump(do_universal_inn_check(5702001741));
  41.  
Success #stdin #stdout 0.02s 52472KB
stdin
Standard input is empty
stdout
bool(false)
bool(true)