成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

PHP獲取IMEI號最后一位校驗碼

RyanQ / 3295人閱讀

摘要:移動設備國際識別碼是區(qū)別移動設備的標志具有唯一性貼在手機背面的標志上并且儲存在移動設備中可用于監(jiān)控被竊或無效的移動設備它也是該手機在廠家的檔案和身份證號碼由全球移動通信協(xié)會統(tǒng)一分配授權英國通信認證管理委員會審受其總長為位每位數(shù)字僅使用的數(shù)字

移動設備國際識別碼(IMEI:International Mobile Equipment Identification Number)是區(qū)別移動設備的標志,具有唯一性,貼在手機背面的標志上,并且儲存在移動設備中,可用于監(jiān)控被竊或無效的移動設備,它也是該手機在廠家的"檔案"和"身份證號".IMEI碼由GSM(全球移動通信協(xié)會)統(tǒng)一分配,授權BABT(英國通信認證管理委員會)審受.其總長為15位,每位數(shù)字僅使用0~9的數(shù)字

IMEI由15位數(shù)字組成,其組成為:

1、前6位數(shù)(TAC,Type ApprovalCode)是"型號核準號碼",一般代表機型.
2、接著的2位數(shù)(FAC,Final Assembly Code)是"最后裝配號",一般代表產地.
3、之后的6位數(shù)(SNR)是"串號",一般代表生產順序號.
4、最后1位數(shù)(SP)通常是"0",為檢驗碼,備用.

IMEI校驗碼算法:

(1).將偶數(shù)位數(shù)字分別乘以2,分別計算個位數(shù)和十位數(shù)之和
(2).將奇數(shù)位數(shù)字相加,再加上上一步算得的值
(3).如果得出的數(shù)個位是0則校驗位為0,否則為10減去個位數(shù)

如:35 89 01 80 69 72 41 偶數(shù)位乘以2得到52=10 92=18 12=02 02=00 92=18 22=04 1*2=02,計算奇數(shù)位數(shù)字之和和偶數(shù)位個位十位之和,得到 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

代碼如下:

/**
     * 格式化imei
     * 因為IMEI格式不統(tǒng)一,長度有14位和16位的,所以,為了統(tǒng)一,將14位和16位的MEID,統(tǒng)一設置為15位的 設置格式:
     * 如果IMEI長度為14位,那么直接得到第15位,如果MEID長度為16位,那么直接在根據(jù)前14位得到第15位
     * 如果IMEI長度為其他長度,那么直接返回原值
     * (1).將偶數(shù)位數(shù)字分別乘以2,分別計算個位數(shù)和十位數(shù)之和
     * (2).將奇數(shù)位數(shù)字相加,再加上上一步算得的值
     * (3).如果得出的數(shù)個位是0則校驗位為0,否則為10減去個位數(shù)
     * 如:35 89 01 80 69 72 41 偶數(shù)位乘以2得到5*2=10 9*2=18 1*2=02 0*2=00 9*2=18 2*2=04 1*2=02,
     * 計算奇數(shù)位數(shù)字之和和偶數(shù)位個位十位之和,得到 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
     * @param imei $
     * @author Baip [email protected]
     */
    public function formatImei( $imei ){
        if ( empty( $imei ) ){
            return false;
        }
        $imeiStrlen = strlen($imei);
        if ( $imeiStrlen != 14 && $imeiStrlen != 16 ){
            return $imei;
        }
        $imeiRes = "";
        if ( $imeiStrlen == 14 ){
            $imeiRes = $imei . $this->getImei15($imei);
        }
        if ($imeiStrlen == 16) {
            $imeiRes =  $imei . $this->getImei15(substr($imei, 0,14));
        }

        return $imeiRes;
    }

    /**
     * 根據(jù)imei前14位,得到第15位的校驗位
     * IMEI校驗碼算法:
     * (1).將偶數(shù)位數(shù)字分別乘以2,分別計算個位數(shù)和十位數(shù)之和
     * (2).將奇數(shù)位數(shù)字相加,再加上上一步算得的值
     * (3).如果得出的數(shù)個位是0則校驗位為0,否則為10減去個位數(shù)
     * 如:35 89 01 80 69 72 41 偶數(shù)位乘以2得到5*2=10 9*2=18 1*2=02 0*2=00 9*2=18 2*2=04 1*2=02,計算奇數(shù)位數(shù)字之和和偶數(shù)位個位十位之和,
     * 得到 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
     * @param $imei
     * @author Baip [email protected]
     */
    private function getImei15($imei){
        if ( strlen( $imei ) == 14 ){
            $imeiArr = str_split($imei);
            $imeiNewArr = [];
            foreach ($imeiArr as  $key => $value){
                $imeiNewArr[$key+1] = $value;
            }
            $sum1 = 0;
            $sum2 = 0;
            if ( is_array($imeiNewArr) && count($imeiNewArr) == 14 ){
                for ($i=1; $i<= count($imeiNewArr); $i++ ){
                    //如果為偶數(shù)
                    if ( $i % 2 == 0 ){
                        $temp = intval( ($imeiNewArr[$i] - 0) * 2 );
                        if ($temp < 10){
                            $sum2 = $sum2 + $temp;
                        }else{
                            //目的:大于10的值12,最后要用個位+十位 (1+2) 轉化為:sum + 1 + 12-10
                            $sum2 = $sum2 + 1 + $temp -10 ;
                        }
                    }else{
                        $sum1  = $sum1 + $imeiNewArr[$i] - "0";
                    }
                }
                $total = $sum1 + $sum2;
                if ( $total % 10 == 0 ){
                    return 0;
                }else{
                    return intval(10 - $total % 10);
                }
            }else{
                return "";
            }
        }
    }

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://systransis.cn/yun/28726.html

相關文章

  • js驗證身份證記錄

    摘要:中華人民共和國居民身份證驗證規(guī)則如下號碼的結構公民身份號碼是特征組合碼,由十七位數(shù)字本體碼和一位校驗碼組成。排列順序從左至右依次為六位數(shù)字地址碼,八位數(shù)字出生日期碼,三位數(shù)字順序碼和一位數(shù)字校驗碼。 在一些需要填寫身份證的表單網頁中,需要對身份證的輸入做一個驗證,于是,我記錄下了自己寫的驗證。在寫驗證之前,我們需要理解身份證的一些常識規(guī)則。中華人民共和國居民身份證驗證規(guī)則如下: 1.號...

    KitorinZero 評論0 收藏0
  • JavaScript 18位身份證驗證及身份證規(guī)則

    摘要:如果余數(shù)是,身份證的最后一位號碼就是。舉例某男性的身份證號碼是。我們要看看這個身份證是不是合法的身份證。首先我們得出前位的乘積和然后再求余最后通過對應規(guī)則就可以知道余數(shù)對應的數(shù)字是。 18位身份證號碼各位的含義 1-2位省、自治區(qū)、直轄市代碼;3-4位地級市、盟、自治州代碼;5-6位縣、縣級市、區(qū)代碼;7-14位出生年月日,比如19670401代表1967年4月1日;15-17位為順序...

    MasonEast 評論0 收藏0
  • 15位、18位身份證正則表達式

    摘要:例也可通過驗證,而月并不存在日校驗碼是由位本體碼計算得出,方案并未校驗此碼這個鏈接中的位正則表達式錯的,最后順序碼應該是位。 身份證正則表達式 在項目中遇到身份證號碼驗證,百度了一些資料,太簡單的和太復雜的pass,綜合了一些案例,取長補短,形成了個折中版本的,正則表達式如下: var reg =/(^[1-9]d{5}(18|19|([23]d))d{2}((0[1-9])|(10|...

    galois 評論0 收藏0
  • workerman 簡要分析

    摘要:后面每開啟一個子進程,會將子進程的存儲到中,用來后面主進程監(jiān)控子進程,如果子進程意外終止,主進程可以重新佛。將當前子進程設置為會話組再次創(chuàng)建子進程,為了防止在的系統(tǒng)下重新打開控制終端。 wokerman 啟動分析 @(學習)[workerman, php] 前期想說的 也是最近才看的代碼,遇到不懂得地方就去google,所以這篇文章里面穿插了很多參考資料,可以直接點擊閱覽。 需要了解一...

    senntyou 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<