/**
* 验证imei的正确性<p>
* @access public
* @param string $imei
* @return boolean
*/
function checkImei ($imei)
{
if (empty($imei))
{
return false;
}
//TODO 对于14位的imei,不再验证,效果待验证 By Alex 20120117
$imei = str_replace('-', '', $imei);
if (14 == strlen($imei))
{
if ('00000000000000' != $imei)
{
return true;
}
return false;
}
//必须为15字符 By Alex 20111221
if (15!=strlen($imei) || '000000000000000' == $imei || !is_numeric($imei))
{
return false;
}
$len = 14;
$index = 0;
$sum = 0;
$rsl = false;
if (is_numeric($imei[0]))
{
//验证IMEI
while ($index < $len)
{
if (0 == ($index & 1))
{
$sum += ($imei[$index]);
}
else
{
$tmp = $imei[$index] << 1;
$sum += intval($tmp / 10);
$sum += $tmp % 10;
}
$index++;
}
$sum = $sum % 10;
if (0 == $sum && 0 == $imei[$len])
{
$rsl = true;
}
else
{
$rsl = ((10 - $sum) == $imei[$len]);
}
}
else
{
//校验MEID
$index = 0;
$sum = 0;
while ($index < $len)
{
if (0 == ($index & 1))
{
$sum += hexdec($imei[$index]);
}
else
{
$tmp = hexdec($imei[$index]) << 1;
$sum += $tmp >> 4;
$sum += $tmp & 15;
}
$index++;
}
$sum = $sum & 15;
if (0 == $sum && 0 == $imei[$len])
{
$rsl = true;
}
else
{
$rsl = ((16 - $sum) == hexdec($imei[$len]));
}
}
//For test:记录验证失败的imei,以供测试
// if (!$rsl)
// {
// @file_put_contents('/tmp/imei_not_pass', "\n\n" . $imei, FILE_APPEND);
// }
return $rsl;
}