当前位置: 首页 > news >正文

计算IMEI号的校验位

计算IMEI号的校验位

       移动设备国际识别码(IMEI:International Mobile Equipment Identification Number)是差别移动设备的标志,具有唯一性,贴在手机背面的标志上,而且储存在移动设备中,可用于监控被窃或无效的移动设备,它也是该手机在厂家的"档案"和"身份证号".IMEI码由GSM(全球移动通信协会)统一分配,授权BABT(英国通信认证管理委员会)审受.其总长为15位,每位数字仅使用0~9的数字(含义见下文).

       IMEI由15位数字组成,其组成为:

  • 1、前6位数(TAC,Type ApprovalCode)是"型号核准号码",一般代表机型.
  • 2、接着的2位数(FAC,Final Assembly Code)是"最后装配号",一般代表产地.
  • 3、之后的6位数(SNR)是"串号",一般代表生产顺序号.
  • 4、最后1位数(SP)一般是"0",为检验码,备用.

      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

char GetIMEICheckDigit(char *pp_Imei)
{
	int i;
	int vl_Sum1 = 0, vl_Sum2 = 0, vl_Total = 0;
	int vl_Temp = 0;

	for (i = 0; i<14; i++)
	{
		/*(1)将奇数位数字相加(从1開始计数)*/
		if ((i % 2) == 0)
		{
			vl_Sum1 = vl_Sum1 + pp_Imei[i] - '0';
		}
		else
		{
			/*(2)将偶数位数字分别乘以2,分别计算个位数和十位数之和(从1開始计数)*/
			vl_Temp = (pp_Imei[i] - '0') * 2;
			if (vl_Temp < 10)
			{
				vl_Sum2 = vl_Sum2 + vl_Temp;
			}
			else
			{
				vl_Sum2 = vl_Sum2 + 1 + vl_Temp - 10;
			}
		}
	}

	/*(1)+(2)*/
	vl_Total = vl_Sum1 + vl_Sum2;

	/*假设得出的数个位是0则校验位为0,否则为10减去个位数 */
	if ((vl_Total % 10) == 0)
	{
		return '0';
	}
	else
	{
		return (char)(10 - (vl_Total % 10) + '0');
	}
}

相关文章:

  • 删除所有的用户表,存储过程,游标的应用,动态SQL的使用
  • 简单的回顾
  • Memcached的线程模型及状态机
  • pre标签内文本自动换行
  • 最大熵工具包的使用
  • iptables开启,通过nginx无法访问php程序
  • 在linux系统(CentOS)上安装中文支持包
  • Android -- Glide框架详解(一)
  • win7下开启web服务器
  • Graylog2+Elasticsearch+Nxlog
  • 初到51CTO
  • iOS多线程与网络开发之小文件上传
  • sqlserver 语句
  • 动态规划 List
  • A useful UrlBuilder class
  • 【JavaScript】通过闭包创建具有私有属性的实例对象
  • 【vuex入门系列02】mutation接收单个参数和多个参数
  • 【前端学习】-粗谈选择器
  • 2017 年终总结 —— 在路上
  • docker容器内的网络抓包
  • Netty 框架总结「ChannelHandler 及 EventLoop」
  • SAP云平台里Global Account和Sub Account的关系
  • uni-app项目数字滚动
  • vue脚手架vue-cli
  • Vultr 教程目录
  • 大快搜索数据爬虫技术实例安装教学篇
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 给新手的新浪微博 SDK 集成教程【一】
  • 你真的知道 == 和 equals 的区别吗?
  • 学习笔记:对象,原型和继承(1)
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • 异步
  • AI又要和人类“对打”,Deepmind宣布《星战Ⅱ》即将开始 ...
  • HanLP分词命名实体提取详解
  • 格斗健身潮牌24KiCK获近千万Pre-A轮融资,用户留存高达9个月 ...
  • ​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
  • #include到底该写在哪
  • #ubuntu# #git# repository git config --global --add safe.directory
  • #Z0458. 树的中心2
  • (python)数据结构---字典
  • (三)Honghu Cloud云架构一定时调度平台
  • (三)uboot源码分析
  • (转载)CentOS查看系统信息|CentOS查看命令
  • .aanva
  • .NET CLR基本术语
  • .net core webapi Startup 注入ConfigurePrimaryHttpMessageHandler
  • .NET Framework 服务实现监控可观测性最佳实践
  • .NET 中 GetProcess 相关方法的性能
  • .net流程开发平台的一些难点(1)
  • /var/log/cvslog 太大
  • @angular/cli项目构建--Dynamic.Form
  • @DataRedisTest测试redis从未如此丝滑
  • @media screen 针对不同移动设备
  • @RequestBody与@ResponseBody的使用
  • [ C++ ] STL---stack与queue