zoukankan      html  css  js  c++  java
  • 判断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>';
  • 相关阅读:
    玩不转云计算的架构
    从《从架构的角度看,如何写好代码?》中来看如何编写单元测试代码
    换种形式工作
    程序员下一门要学的编程语言Swift
    从钉钉微应用定制化导航栏看如何实现Hybrid App开发框架
    纯灌水Linus主义
    kFreeBSD有活过来的迹象?UbuntuBSD
    架构的重要性
    MacOS下如何进行Git的冲突(Conflict)处理
    [转]以Facebook为案例剖析科技公司应有的工具文化
  • 原文地址:https://www.cnblogs.com/helin/p/3978579.html
Copyright © 2011-2022 走看看