zoukankan      html  css  js  c++  java
  • IMEI校验思路及代码

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="UTF-8">
            <title></title>
        </head>
        <body>
            <pre>
    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
    </pre>
            <!--35 89 01 80 69 72 41 7-->
            <input type="text" value='358901806972417' />
            <button onclick="check()">校验</button><br />
            <p>批量生成IMEI</p>
            数量:<input type="text" id="num" value="1" />
            <button onclick="generate()">生成</button>
            <div id="box"></div>
           
            <script type="text/javascript">
                var oInput = document.getElementsByTagName("input")[0];
                function check(){
                    var val = oInput.value;
                    if(val && val.length == 15){
                        // var res = checkNum(sumIMEI(val.slice(0,14)), val.slice(-1));
                        var res = checkNum(calLastNum(sumIMEI(val.slice(0,14))),val.slice(-1))
                        console.log("校验结果", res);
                        return res;
                    }else{
                        console.log("长度有误");
                        return false;
                    }
                }
                
                function doubleNum (n){
                    if(n === undefined || n === null){
                        return "";
                    }
                    n = String(n);
                    if(n.length > 2){
                        return n
                    }else{
                        n = "0" + n;
                        return n.slice(-2);
                    }
                }
                
                function sumIMEI(str){ // 传入IMEI的前14位
                    var res = 0, tempNum, tempStr;
                    for(let i = 0, len = str.length; i < len; i++){
                        if(i % 2 == 0){ // 奇数位
                            res += Number(str[i]);
                        } else { // 偶数位
                            tempNum = Number(str[i]) * 2;
                            tempStr = doubleNum(tempNum);
                            res += Number(tempStr[0]) + Number(tempStr[1]);
                        }
                    }
                    console.log(res);
                    return res;
                }
                
                function checkNum(rightTestNum, t){ // 校验位校验 num:sumIMEI的结果,t:IMEI的最后一位校验位
                    
                    console.log("正确的校验位", rightTestNum);
                    if(rightTestNum == t){
                        return true;
                    }else{
                        return false;
                    }
                }
                
                function calLastNum(num){
                    var temp = String(num);
                    var rightTestNum;
                    console.log(temp.slice(-1));
                    var lastNum = Number(temp.slice(-1));
                    
                    if(lastNum){ // 末位不为0,用 10-末位
                        rightTestNum = 10 - lastNum;
                    }else{ // 末位为0,返回0
                        rightTestNum = lastNum;
                    }
                    return rightTestNum;
                }
                
                function generate(){
                    var arr = [];
                    var count = Number(document.getElementById("num").value);
                    if(!count){
                        return arr;
                    }
                    
                    for(let i = 0; i <count; i++){
                        var str = String(Math.random()).slice(-14);
                        var num = sumIMEI(str);
                        var lastNum = calLastNum(num);
                        arr.push(str + lastNum);
                    }
                    console.log(arr);
                    var oDiv = document.getElementById("box");
                    oDiv.innerHTML = "";
                    arr.forEach(item => {
                        oDiv.innerHTML += "<p>" + item + "</p>";
                    })
                    
                    return arr;
                }
            </script>
        </body>
    </html>
  • 相关阅读:
    VlanTrunk
    2015届互联网名企校招网址一览表
    The declared package does not match the expected package
    经典的算法网站
    Nutch
    JTable只要一双击就进入编辑状态,禁止的方法实现
    Java通过JDBC链接数据库,数据库中wen
    Cisco Packet Tracer的使用(一)
    Nutch安装的几个网址
    面试经
  • 原文地址:https://www.cnblogs.com/zhaodesheng/p/10268761.html
Copyright © 2011-2022 走看看