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

IMEI校验思路及代码的更多相关文章

  1. [技术栈]C#利用Luhn算法(模10算法)对IMEI校验

    1.Luhn算法(模10算法) 通过查看ISO/IEC 7812-1:2017文件可以看到对于luhn算法的解释,如下图: 算法主要分为三步: 第一步:从右边第一位(最低位)开始隔位乘2: 第二步:把 ...

  2. ASP.NET 大文件下载的实现思路及代码

    文件下载是一个网站最基本的功能,ASP.NET网站的文件下载功能实现也很简单,但是如果遇到大文件的下载而不做特殊处理的话,那将会出现不可预料的后果.本文就基于ASP.NET提供大文件下载的实现思路及代 ...

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

    原文网址:http://www.jb51.net/article/37236.htm Android自定义Adapter的ListView的思路及代码,需要的朋友可以参考一下   在开发中,我们经常使 ...

  4. HTML5绘制矩形和圆形并且还有获取在这个图层内的坐标的思路和代码 - feilong_12的专栏 - 博客频道 - CSDN.NET

    body{ font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI& ...

  5. 用Java实现断点续传的基本思路和代码

    用Java实现断点续传的基本思路和代码   URL url = new URL(http://www.oschina.net/no-exist.zip); HttpURLConnection http ...

  6. Py-解决粘包现象,tcp实现并发,tcp实现传输文件的程序,校验思路,线程与进程

    黏包现象 TCP粘包就是指发送方发送的若干包数据到达接收方时粘成了一包,从接收缓冲区来看,后一包数据的头紧接着前一包数据的尾,出现粘包的原因是多方面的,可能是来自发送方,也可能是来自接收方TCP接收到 ...

  7. 1.Two Sum(c++)(附6ms O(n) accepted 思路和代码)

    问题描述: Given an array of integers, return indices of the two numbers such that they add up to a speci ...

  8. java 26 - 6 网络编程之 TCP协议 传输思路 以及 代码

    TCP传输 Socket和ServerSocket 建立客户端和服务器 建立连接后,通过Socket中的IO流进行数据的传输 关闭socket 同样,客户端与服务器是两个独立的应用程序 TCP协议发送 ...

  9. n皇后2种解题思路与代码-Java与C++实现

    林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 摘要:本文主要讲了n皇后问题的解题思路,并分别用java和c++实现了过程,最后,对于算法改进 ...

随机推荐

  1. LINUX对超级用户和普通用户的理解

    什么是超级用户 在所有Linux系统中,系统都是通过UID来区分用户权限级别的,而UID为0的用户被系统约定为是具有超级权限.超级用户具有在系统约定的最高权限满园内操作,所以说超级用户可以完成系统管理 ...

  2. numpy 常用工具函数 —— np.bincount/np.average

    numpy 常用工具函数 —— np.bincount/np.average numpy 常用api(一) numpy 常用api(二) 一个函数提供 random_state 的关键字参数(keyw ...

  3. Redis源码解析:17Resis主从复制之主节点的部分重同步流程及其他

    本文主要讲解主节点部分重同步的实现,以及主从复制中的其他功能.本文是Redis主从复制机制的最后一篇文章. 主节点在收到从节点发来的PSYNC命令之前,主节点的部分重同步流程,与完全重同步流程是一样的 ...

  4. 批量操作文本文件进行dos/unix格式转换

    批量将目录下所有文件进行 dos/unix 格式转换 使用 sed + grep #sed -i "s/原字符串/新字符串/g" `grep 原字符串 -rl 所在目录` eg:  ...

  5. 【html、CSS、javascript-4】新特征之增强表单

    一.input元素及属性 input元素的属性 type属性:指定输入内容的类型,默认为text:单行文本框 name属性:输入内容的识别名称,传递参数时候的参数名称 value属性:默认值 maxl ...

  6. Python 原生2种 邮件发送(发送验证码) 的方法

    import smtplib from email.mime.text import MIMEText # 第三方 SMTP 服务 mail_host = "smtp.sina.cn&quo ...

  7. Cors之带凭据的请求

    带凭据的请求 默认情况下,跨源请求不提供凭据.通过将withCredentials属性设置为true,可以制定某个请求应该发送凭据.

  8. JAVA:在0-99间产生100个不重复的随机数

    Random rand = new Random(); boolean[] bool = new boolean[100]; int[] number = new int[100]; int rand ...

  9. wordpress设置一个特定的页面作为首页

    首先在"页面"里新建一个页面,比如标题为"welcome"; 然后在设置里找到"阅读",首页显示调整为"一个静态页面", ...

  10. Javascript-商品管理新增/删除/修改功能

    <!DOCTYPE html> <html lang="en" xmlns="http://www.w3.org/1999/xhtml"> ...