android中 IMEI和ICCID的校验位计算
我们都知道在android 中有IMEI和ICCID 这两项数据. 至于这两项数据的获取方式以及所表示的意思在此我就不写了.主要讲讲这两项数据最后一位的校验位如何计算的.
IMEI共15位 最后一位是校验位. 其校验位计算规则如下:
1. 从左到右将偶数位数字分别乘以2,然后计算个位数和十位数之和
2. 将奇数位数字相加,再加上上一步算得的值
3. 如果得出的数个位是0则校验位为0,否则为10减去个位数
例: 864682038025912 最后一位校验位是 2 所以我们拿出前14位来计算
8 | 6 | 4 | 6 | 8 | 2 | 0 | 3 | 8 | 0 | 2 | 5 | 9 | 1 |
12 | 12 | 4 | 6 | 0 | 10 | 2 | |||||||
8 | 1+2 | 4 | 1+2 | 8 | 4 | 0 | 6 | 8 | 0 | 2 | 1+0 | 9 | 2 |
第三行相加 得到 8+1+2+4+1+2+8+4+0+6+8+0+2+1+9+2 = 58
OK, 我们得到的值是58 显然个位数字不是0 所以校验位的值应该是 10-8 = 2 最后校验位就是 2
现在Java代码如下:
/*** 根据IMEI的前14位 计算出第15位* @param imei 的前14位* @return*/
public static String getimei15(String imei){if (imei.length() == 14) {char[] imeiChar=imei.toCharArray();int resultInt=0;for (int i = 0; i < imeiChar.length; i++) {int a=Integer.parseInt(String.valueOf(imeiChar[i]));i++;final int temp=Integer.parseInt(String.valueOf(imeiChar[i]))*2;final int b=temp<10?temp:temp-9;resultInt+=a+b;}resultInt%=10;resultInt=resultInt==0?0:10-resultInt;return resultInt + "";}else{return "0";}
}
ICCID共20位, 最后一位的校验位计算规则如下:
1. 取前19位 . 从左到右奇数位开始. 乘以2 然后计算个位与十位数之和.
2. 将所有偶数位的数字与上一步得到的值全部相加
3. 将上一步得到的值乘以9 然后取余. 得到的值就是第20位的校验位
例: 89860262191507034404 最后一位校验位是4
8 | 9 | 8 | 6 | 0 | 2 | 6 | 2 | 1 | 9 | 1 | 5 | 0 | 7 | 0 | 3 | 4 | 4 | 0 |
16 | 16 | 0 | 12 | 2 | 2 | 0 | 0 | 8 | 0 | |||||||||
1+6 | 9 | 1+6 | 6 | 0 | 2 | 1+2 | 2 | 2 | 9 | 2 | 5 | 0 | 7 | 0 | 3 | 8 | 4 | 0 |
第三行相加 1+6+9+1+6+6+0+2+1+2+2+2+9+2+5+0+7+0+3+8+4+0=76
76*9 = 684
校验位就是 684%10=4 各位可以到 http://www.heicard.com/check_iccid 验证该计算方法.
java代码如下
/*** 获取ICCID的第20位* @param iccid iccid的前19位* @return*/
public static String getICCID20(String iccid){if (iccid.length() == 19) {char[] imeiChar=iccid.toCharArray();int resultInt = 0;for (int i = 0; i < imeiChar.length; i++) {int a=Integer.parseInt(String.valueOf(imeiChar[i]))*2; int count = a/10+a%10; //将十位数 与个位数 相加 resultInt = resultInt+ count;i++;if(i<19) {int b=Integer.parseInt(String.valueOf(imeiChar[i])); resultInt = resultInt + b;}}resultInt = resultInt*9;return String.valueOf(resultInt%10);}else{return "6";}}
android中 IMEI和ICCID的校验位计算相关推荐
- android cpu负载 工具,计算Android中进程的CPU使用率
我正在尝试按以下方式计算Android中进程的CPU使用率,但是由于产生的输出,我不确定它是否正确. 要将吉菲转换为秒:吉菲/赫兹 第一步: 使用/proc/uptime文件的第一个参数获取正常运行时 ...
- android+双卡imei,以编程方式在Android中为双SIM卡检索IMEI号码
对于单个SIM,以下代码有效: TelephonyManager tm = (TelephonyManager)getSystemService(TELEPHONY_SERVICE); String ...
- android开发获取imei码,Android中获取IMEI码的方法
我们在开发项目的时候,通常要获取手机的IMEI码,这是开发的必备需求,接下来,爱站技术频道小编就告诉大家Android中获取IMEI码的方法,希望本文的介绍能提高大家的水平. 核心代码:Imei = ...
- android代码 IMEI,Android_Android中获取IMEI码的方法,核心代码:Imei = ((TelephonyManager) - phpStudy...
Android中获取IMEI码的方法 核心代码:Imei = ((TelephonyManager) getSystemService(TELEPHONY_SERVICE)) .getDeviceId ...
- NB模组中序列号,IMEI,IMSI,ICCID的含义(一些知识科普)
概述 下面简述关于NB模组中使用,IMEI,IMSI,ICCID的含义. 什么是序列号? 序列号是一串标识你手机出生证明以及身材特征的信息,甚至还可用来识别是否为官方翻新机. 你可以简单的将这一串数字 ...
- MCC、MNC、PLMN、IMSI、IMEI、ICCID、MSISDN
MCC MCC 是 Mobile Country Code 的缩写,译为移动国家代码.它由三位数字组成.用于标识一个国家,但一个国家可以被分配多个 MCC .比如美国的 MCC 有 310,311 ...
- PIN,PUK,IMEI,ICCID,Ki,IMSI,SMSP之间的区别
PIN,PUK,IMEI,ICCID,Ki,IMSI,SMSP之间的区别 原文:[url]http://nokia.zol.com.cn/184/297_1832041.html[/url] 什么是S ...
- 学习转载:Android中常用shell命令详解
https://blog.csdn.net/Z_HUALIN/article/details/77878609 设置adb环境变量 其实就是将adb.exe的路径放到Path中,目的是cmd直接可以使 ...
- Android 中View的绘制机制源代码分析 三
到眼下为止,measure过程已经解说完了,今天開始我们就来学习layout过程.只是在学习layout过程之前.大家有没有发现我换了编辑器,哈哈.最终下定决心从Html编辑器切换为markdown编 ...
最新文章
- 致敬YOLO!华科提出YOLOS:基于视觉Transformer的目标检测
- linux磁盘满处理
- ERPLAB中文教程:ERPLAB安装与添加通道
- C++ primer记录
- 【企业管理】高效会议关注点
- c++rpg黑框游戏_NO总本色出演断智大师兄,电竞魔音主C人《超级猎杀》一战成名...
- 容器性能比无容器服务器,【译】容器 vs 无服务器(Serverless)
- linux常用的文件操作命令大全,(办公)记事本_Linux常用的文件操作命令
- H5页面快速搭建之高级字体应用实践
- 定位相关MATLAB仿真代码与在线MATLAB仿真平台
- zabbix交换机监控
- 《自己动手写CPU》第七章 --算术操作指令的实现
- Java调用外部api接口请求数据(阿里云ISBN查询图书信息为例)
- Beyond Compare 过期解决办法
- (十一)51单片机——用AT24C02实现存储秒表数据(附成果展示)
- 跨境电商推广干货:掘金东南亚和这几个推广平台
- 穆迪收购风险与合规情报、数据和软件领域的领导者RDC
- centos 7 时间与网络同步
- 爱情顾问岗,雷哥成功拿到了offer
- 多帧点云数据拼接合并_基于单帧图像与稀疏点云融合的道路交通标线提取算法研究...
热门文章
- Java调用 阿里大鱼 短信接口
- c语言 system(quot;pausequot;);,pause什么意思_C语言中system(quot;pausequot;)是什么作用和意...
- 2021-05-31 size mismatch for transformers copying a param
- Unity中网格合并
- 智取天狼星计划(二)
- 05-HTML标签图文详解(二)
- html中设置控件大小,css按钮的大小设置
- s:form action=login...与s:form action = login.action.的区别
- pkill java_pkill命令按进程名称杀死全部进程
- pkill mysql_linux kill用法、killall、pkill、xkill