<!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>

转载于:https://www.cnblogs.com/zhaodesheng/p/10268761.html

IMEI校验思路及代码相关推荐

  1. python登录代码思路_用python登录Dr.com思路以及代码分享

    用python登录Dr.com思路以及代码分享 发布于 2014-08-28 22:31:52 | 192 次阅读 | 评论: 0 | 来源: 网友投递 Python编程语言Python 是一种面向对 ...

  2. 最全中文leetcode解题攻略:思路知识点代码...搞定AI大厂笔试

    本文经AI新媒体量子位(公众号ID:qbitai)授权转载,转载请联系出处. 本文约多图,建议阅读5分钟. 本文为你分享中文leetcode解题攻略,助你通过AI大厂笔试. 当代程序员的困惑可能大致分 ...

  3. Android自定义Adapter的ListView的思路及代码

    Android自定义Adapter的ListView的思路及代码,需要的朋友可以参考一下 width="650" height="200" align=&quo ...

  4. AT串口抽象层的设计思路及代码实现

    文章目录 1 AT串口抽象层的设计思路及代码实现 1.1 AT串口抽象层的设计思路 1.2 AT串口抽象层的代码实现 1 AT串口抽象层的设计思路及代码实现 1.1 AT串口抽象层的设计思路 我们先来 ...

  5. DayDayUp之Job:牛客网—算法工程师—剑指offer之66道在线编程(解决思路及其代码)——1~20

    DayDayUp之Job:牛客网-算法工程师-剑指offer之66道在线编程(解决思路及其代码)--01~20 目录 剑指offer--66道在线编程--01~20 1.二维数组中的查找某个targe ...

  6. ML之分类预测:机器学习中多分类预测数据集可视化(不同类别赋予不同颜色)设计思路及代码实现

    ML之分类预测:机器学习中多分类预测数据集可视化(不同类别赋予不同颜色)设计思路及代码实现 目录 机器学习中多分类预测数据集可视化(不同类别赋予不同颜色)设计思路及代码实现 代码实现

  7. DayDayUp之Job:牛客网—算法工程师—剑指offer之66道在线编程(解决思路及其代码)——41~66

    DayDayUp之Job:牛客网-算法工程师-剑指offer之66道在线编程(解决思路及其代码)--41~66 目录 剑指offer之66道在线编程--41~66 42.和为s的两个数字 43.左旋转 ...

  8. DayDayUp之Job:牛客网—算法工程师—剑指offer之66道在线编程(解决思路及其代码)——21~40

    DayDayUp之Job:牛客网-算法工程师-剑指offer之66道在线编程(解决思路及其代码)--21~41 目录 剑指offer之66道在线编程--21~41 21.栈的压入.弹出序列 22.从上 ...

  9. ML之XGBoost:XGBoost算法模型(相关配图)的简介(XGBoost并行处理)、关键思路、代码实现(目标函数/评价函数)、安装、使用方法、案例应用之详细攻略

    ML之XGBoost:XGBoost算法模型(相关配图)的简介.关键思路.代码实现(目标函数/评价函数).安装.使用方法.案例应用之详细攻略 目录 XGBoost算法模型(相关配图)的简介 1.XGB ...

  10. 50行的python游戏代码_50行代码实现贪吃蛇(具体思路及代码)

    [下载文档:  50行代码实现贪吃蛇(具体思路及代码).txt ] (友情提示:右键点上行txt文档名->目标另存为) 50行代码实现贪吃蛇(具体思路及代码) 最近一直在准备用来面试的几个小de ...

最新文章

  1. 51CTO博客弹出框精彩博文记录【2013年第二季度】
  2. 判断一个对象是否存在某个键_面向工业大数据的对象存储技术实践
  3. Scala入门到精通——第二十三节 高级类型 (二)
  4. C++ 初始化列表初始化列表性能问题的简单的探索
  5. 携程运维自动化平台,上万服务器变更也可以很轻松
  6. Unity2020.1新功能探路:Profiler相关更新
  7. SQL UNION 和 UNION ALL 操作符
  8. interop.cdo 发送邮件乱码_手把手教你用 Java 发送邮件,不用框架
  9. slickedit自定义代码片段
  10. 如何在手机上安装linux系统并可视化界面
  11. Shiro小白新手入门教程,一看就会
  12. django crontab UnicodeDecodeError: 'utf-8' codec can't decode byte 0xfe in position 9: invalid start
  13. 默写人体的方法有哪些?如何默写好画人体?
  14. failover机制
  15. dubbo comsumer指定服务
  16. Nginx之正则表达式、location匹配简介以及rewrite重写
  17. 移动 app安全评估检测技术分析
  18. Unity Shader学习:水墨效果
  19. 华为写代码的这13年,成为了我最宝贵的人生历程
  20. 通过,aria-describedby属性,获取元素,并设置样式

热门文章

  1. 软件版本的GA、RC的具体含义
  2. TeaVM编译JAVA感想:看着简单,做起来真难
  3. undefined reference to `swr_init+
  4. LINUX:安装下载源码用的hg
  5. 桌面魔术可以用透明桌子揭密
  6. C#中IPAddress与域名的使用
  7. h文件中报错 unterminated conditional directive的原因
  8. html flash rtmp,Web直播之RTMP协议:vue-video-player + videojs-flash
  9. html5控制字大小的代码,js根据字符串长度控制字体大小代码
  10. 单机rust怎么设置白天_安卓单机游戏评测:侠盗猎车手3十周年版本