专注Java领域技术
我们一直在努力

判断IMEI或MEID是否合法

原文始发于:判断IMEI或MEID是否合法

判断IMEI或MEID是否合法

/*———————————————–
* 判断此字串所代表的IMEI或MEID是否合法
* @param imei
* @author Helin 2014-08-21 add 
* @return boolen
* IMEI校验码算法:
* (1).将偶数位数字分别乘以2,分别计算个位数和十位数之和 
* (2).将奇数位数字相加,再加上上一步算得的值 
* (3).如果得出的数个位是0则校验位为0,否则为10减去个位数 
* 如:35 89 01 80 69 72 41 偶数位乘以2得到5*2=10 9*2=18 1*2=02 0*2=00 9*2=18 2*2=04 1*2=02,计算奇数位数字之和和偶数位个位十位之和,得到 3+(1+0)+8+(1+8)+0+(0+2)+8+(0+0)+6+(1+8)+7+(0+4)+4+(0+2)=63 => 校验位 10-3 = 7 
———————————————–*/

function is_IMEI( $imei ='' ){
    if(!$imei){return false;}     $imeiLen = strlen($imei);         $DeOrHex = 10;//初始化,先假设此字串为IMEI::纯数字     for($j = 0;$j < $imeiLen;$j++){         $c = $imei[$j];         if(is_numeric($c)){             continue;         }else if( ( $c >= 'A' && $c <= 'F' ) || ( $c >= 'a' && $c <= 'f' ) ){             $DeOrHex = 16;         }else{//如果出现数字和16进制数之外的字符,直接判断不合法             return false;         }     }     if($DeOrHex==10 && $imeiLen != 15){//全是数字(IMEI),且长度不为15         return false;     }     if($DeOrHex==16){//包含合法的16进制数(MEID)         if($imeiLen == 14){//新规定,14位MEID,直接合法,不做校验             return true;         }         if($imeiLen != 14 && $imeiLen != 15){             return false;//如果MEID长度不是14也不是15,直接判断为非法,无需校验         }     }     $count = 0;     for($i = 0;$i < 7;$i++){         $tmp1 = hexdec($imei[$i*2]);//若为16进制字符,则转化为10进制:hexdec('a') == 10;         $tmp2 = hexdec($imei[$i*2+1]) * 2;         $count += $tmp1 + floor($tmp2 / $DeOrHex) + $tmp2 % $DeOrHex;     }     $endInt = $count % $DeOrHex;//和数的最后一位数     $parityBit = $endInt > 0 ? $DeOrHex - $endInt : 0;//校验位     return $parityBit == hexdec($imei[14]); }  $imei = 'a00000426d46cd';//'863139026095804'; echo is_IMEI($imei)?1:0; echo '<hr>';

赞(0) 打赏
未经允许不得转载:Java小咖秀 » 判断IMEI或MEID是否合法
免责声明

抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

专注Java技术 100年

联系我们联系我们

你默默的关注就是最好的打赏~

支付宝扫一扫打赏

微信扫一扫打赏