最近有用到,刚好记录一下方便后续查看,通过 Javascript 或 PHP 校验 IMEI 代码,以及 14 位 IMEI 补全 15 位的计算方法。
Javascript 校验
function isIMEI(s) {
var etal = /^[0-9]{15}$/;
if (!etal.test(s))
return false;
sum = 0;
mul = 2;
l = 14;
for (i = 0; i < l; i++) {
digit = s.substring(l - i - 1, l - i);
tp = parseInt(digit, 10) * mul;
if (tp >= 10)
sum += (tp % 10) + 1;
else
sum += tp;
if (mul == 1)
mul++;
else
mul--;
}
chk = ((10 - (sum % 10)) % 10);
if (chk != parseInt(s.substring(14, 15), 10))
return false;
return true;
}
PHP 校验 IMEI
function checkIMEI($str)
{
if (!preg_match('/^[0-9]{15}$/is', $str)) {
return false;
}
$sum = 0;
$mul = 2;
$l = 14;
for ($i = 0; $i < $l; $i++) {
$digit = substr($str, $l - $i - 1, 1);
$tp = intval($digit, 10) * $mul;
if ($tp >= 10) {
$sum += ($tp % 10) + 1;
} else {
$sum += $tp;
}
if ($mul == 1) {
$mul++;
} else {
$mul--;
}
}
$chk = ((10 - ($sum % 10)) % 10);
if ($chk != intval(substr($str, 14, 1), 10)) {
return false;
}
return true;
}
PHP14 位 IMEI 补全 15 位
function makeCheckIMEI($str)
{
if (!preg_match('/^[0-9]{14}$/is', $str)) {
return false;
}
$sum = 0;
$mul = 2;
$l = 14;
for ($i = 0; $i < $l; $i++) {
$digit = substr($str, $l - $i - 1, 1);
$tp = intval($digit, 10) * $mul;
if ($tp >= 10) {
$sum += ($tp % 10) + 1;
} else {
$sum += $tp;
}
if ($mul == 1) {
$mul++;
} else {
$mul--;
}
}
$chk = ((10 - ($sum % 10)) % 10);
return $str.strval($chk);
}
Comments