我们都知道在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的校验位计算相关推荐

  1. android cpu负载 工具,计算Android中进程的CPU使用率

    我正在尝试按以下方式计算Android中进程的CPU使用率,但是由于产生的输出,我不确定它是否正确. 要将吉菲转换为秒:吉菲/赫兹 第一步: 使用/proc/uptime文件的第一个参数获取正常运行时 ...

  2. android+双卡imei,以编程方式在Android中为双SIM卡检索IMEI号码

    对于单个SIM,以下代码有效: TelephonyManager tm = (TelephonyManager)getSystemService(TELEPHONY_SERVICE); String ...

  3. android开发获取imei码,Android中获取IMEI码的方法

    我们在开发项目的时候,通常要获取手机的IMEI码,这是开发的必备需求,接下来,爱站技术频道小编就告诉大家Android中获取IMEI码的方法,希望本文的介绍能提高大家的水平. 核心代码:Imei = ...

  4. android代码 IMEI,Android_Android中获取IMEI码的方法,核心代码:Imei = ((TelephonyManager) - phpStudy...

    Android中获取IMEI码的方法 核心代码:Imei = ((TelephonyManager) getSystemService(TELEPHONY_SERVICE)) .getDeviceId ...

  5. NB模组中序列号,IMEI,IMSI,ICCID的含义(一些知识科普)

    概述 下面简述关于NB模组中使用,IMEI,IMSI,ICCID的含义. 什么是序列号? 序列号是一串标识你手机出生证明以及身材特征的信息,甚至还可用来识别是否为官方翻新机. 你可以简单的将这一串数字 ...

  6. MCC、MNC、PLMN、IMSI、IMEI、ICCID、MSISDN

    MCC   MCC 是 Mobile Country Code 的缩写,译为移动国家代码.它由三位数字组成.用于标识一个国家,但一个国家可以被分配多个 MCC .比如美国的 MCC 有 310,311 ...

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

  8. 学习转载:Android中常用shell命令详解

    https://blog.csdn.net/Z_HUALIN/article/details/77878609 设置adb环境变量 其实就是将adb.exe的路径放到Path中,目的是cmd直接可以使 ...

  9. Android 中View的绘制机制源代码分析 三

    到眼下为止,measure过程已经解说完了,今天開始我们就来学习layout过程.只是在学习layout过程之前.大家有没有发现我换了编辑器,哈哈.最终下定决心从Html编辑器切换为markdown编 ...

最新文章

  1. 致敬YOLO!华科提出YOLOS:基于视觉Transformer的目标检测
  2. linux磁盘满处理
  3. ERPLAB中文教程:ERPLAB安装与添加通道
  4. C++ primer记录
  5. 【企业管理】高效会议关注点
  6. c++rpg黑框游戏_NO总本色出演断智大师兄,电竞魔音主C人《超级猎杀》一战成名...
  7. 容器性能比无容器服务器,【译】容器 vs 无服务器(Serverless)
  8. linux常用的文件操作命令大全,(办公)记事本_Linux常用的文件操作命令
  9. H5页面快速搭建之高级字体应用实践
  10. 定位相关MATLAB仿真代码与在线MATLAB仿真平台
  11. zabbix交换机监控
  12. 《自己动手写CPU》第七章 --算术操作指令的实现
  13. Java调用外部api接口请求数据(阿里云ISBN查询图书信息为例)
  14. Beyond Compare 过期解决办法
  15. (十一)51单片机——用AT24C02实现存储秒表数据(附成果展示)
  16. 跨境电商推广干货:掘金东南亚和这几个推广平台
  17. 穆迪收购风险与合规情报、数据和软件领域的领导者RDC
  18. centos 7 时间与网络同步
  19. 爱情顾问岗,雷哥成功拿到了offer
  20. 多帧点云数据拼接合并_基于单帧图像与稀疏点云融合的道路交通标线提取算法研究...

热门文章

  1. Java调用 阿里大鱼 短信接口
  2. c语言 system(quot;pausequot;);,pause什么意思_C语言中system(quot;pausequot;)是什么作用和意...
  3. 2021-05-31 size mismatch for transformers copying a param
  4. Unity中网格合并
  5. 智取天狼星计划(二)
  6. 05-HTML标签图文详解(二)
  7. html中设置控件大小,css按钮的大小设置
  8. s:form action=login...与s:form action = login.action.的区别
  9. pkill java_pkill命令按进程名称杀死全部进程
  10. pkill mysql_linux kill用法、killall、pkill、xkill