<?php
function do_universal_inn_check($inn) {
$weights = array(3,7,2,4,10,3,5,9,4,6,8,0); case 12:
//do first 11 digits cksum
$cksum_one = 0;
for($i=0;$i<11;$i++) $cksum_one += $weigths[$i+1] * $chr[$i];
$cksum_one %= 11;
if($cksum_one > 9) $cksum_one %= 10;
//do entire INN
$cksum_two = 0;
for($i=0;$i<12;$i++) $cksum_two += $weights[$i] * $chr[$i];
$cksum_two %= 11;
if($cksum_two > 9) $cksum_two %= 10;
return (((int)$chr[10] === (int)$cksum_one) && ((int)$chr[11] === (int)$cksum_two)) ? true : false;
break;
case 10:
$cksum = 0;
for($i=0;$i<10;$i++) $cksum += (int)$weights[$i+2] * (int)$chr[$i];
$cksum %= 11;
if($cksum > 9) $cksum %= 9;
return ((int)$chr[9] === (int)$cksum) ? true : false;
break;
default:
// ne byvaet takih INN SOOKAA
return false;
break;
}
return false;
}
// test
// invalid 10 int inn
echo var_dump(do_universal_inn_check
(7743013902)); // valid VEKTOR LTD LPP PZDC GMBH
echo var_dump(do_universal_inn_check
(5702001741));
PD9waHAKZnVuY3Rpb24gZG9fdW5pdmVyc2FsX2lubl9jaGVjaygkaW5uKSB7CiAgICAgICAgICAgICAgICBpZighaXNfbnVtZXJpYygkaW5uKSkgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgJHdlaWdodHMgPSBhcnJheSgzLDcsMiw0LDEwLDMsNSw5LDQsNiw4LDApOwogICAgICAgICAgICAgICAgJGNociA9IHN0cl9zcGxpdCgoc3RyaW5nKSRpbm4pOwogICAgICAgICAgICAgICAgc3dpdGNoIChzdHJsZW4oJGlubikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxMjoKICAgICAgICAgICAgICAgICAgICAgICAgLy9kbyBmaXJzdCAxMSBkaWdpdHMgY2tzdW0KICAgICAgICAgICAgICAgICAgICAgICAgJGNrc3VtX29uZSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvcigkaT0wOyRpPDExOyRpKyspICRja3N1bV9vbmUgKz0gJHdlaWd0aHNbJGkrMV0gKiAkY2hyWyRpXTsKICAgICAgICAgICAgICAgICAgICAgICAgJGNrc3VtX29uZSAlPSAxMTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYoJGNrc3VtX29uZSA+IDkpICRja3N1bV9vbmUgJT0gMTA7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vZG8gZW50aXJlIElOTgogICAgICAgICAgICAgICAgICAgICAgICAkY2tzdW1fdHdvID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yKCRpPTA7JGk8MTI7JGkrKykgJGNrc3VtX3R3byArPSAkd2VpZ2h0c1skaV0gKiAkY2hyWyRpXTsKICAgICAgICAgICAgICAgICAgICAgICAgJGNrc3VtX3R3byAlPSAxMTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYoJGNrc3VtX3R3byA+IDkpICRja3N1bV90d28gJT0gMTA7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoKChpbnQpJGNoclsxMF0gPT09IChpbnQpJGNrc3VtX29uZSkgJiYgKChpbnQpJGNoclsxMV0gPT09IChpbnQpJGNrc3VtX3R3bykpID8gdHJ1ZSA6IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgMTA6CiAgICAgICAgICAgICAgICAgICAgICAgICRja3N1bSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvcigkaT0wOyRpPDEwOyRpKyspICRja3N1bSArPSAoaW50KSR3ZWlnaHRzWyRpKzJdICogKGludCkkY2hyWyRpXTsKICAgICAgICAgICAgICAgICAgICAgICAgJGNrc3VtICU9IDExOwogICAgICAgICAgICAgICAgICAgICAgICBpZigkY2tzdW0gPiA5KSAkY2tzdW0gJT0gOTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgoaW50KSRjaHJbOV0gPT09IChpbnQpJGNrc3VtKSA/IHRydWUgOiBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICAvLyBuZSBieXZhZXQgdGFraWggSU5OIFNPT0tBQQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQoKICAgICByZXR1cm4gZmFsc2U7CiAgfQoKLy8gdGVzdAovLyBpbnZhbGlkIDEwIGludCBpbm4KZWNobyB2YXJfZHVtcChkb191bml2ZXJzYWxfaW5uX2NoZWNrKDc3NDMwMTM5MDIpKTsKLy8gdmFsaWQgVkVLVE9SIExURCBMUFAgUFpEQyBHTUJICmVjaG8gdmFyX2R1bXAoZG9fdW5pdmVyc2FsX2lubl9jaGVjayg1NzAyMDAxNzQxKSk7Cg==