最近有用到,刚好记录一下方便后续查看,通过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);
    }
03-11 19:51