计算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‘);
	}
}
时间: 2024-10-19 02:09:20

计算IMEI号的校验位的相关文章

android系统中获取imei号 手机号码 imsi号码

原文:android系统中获取imei号 手机号码 imsi号码 源代码下载地址:http://www.zuidaima.com/share/1550463673584640.htm 一.获取IMEI号码 TelephonyManager telephonyManager=(TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE); String imei=telephonyManager.getDeviceId();

发布一个计算桩号之差的Excel自定义函数(VBA)

这是一个可以计算桩号之差(也就是得到长度)的Excel(或WPS)扩展函数,可以减少工程师在统计工程量时的工作量. 该函数具有一定的通用性.可以在MS Office和金山WPS上使用. 文末会给出使用本函数的简单步骤,关于如何在Excel(或WPS)中自定义函数的较详细介绍请移步这里[1]. 将下面内容复制到模块中去,保存后即可使用自定义的ZH_Len函数计算两个桩号之间的长度. '函数:ZH_Len '作用:起终点桩号之差(返回数字) '作者:@我只是一小小鸟 [email protected

android 中如何获取IMEI号

1)在Telephony Framework内部,可以直接使用GSMPhone或GeminiPhone提供的接口. KK之前的版本: IMEI(International Mobile Equipment Identity)是国际移动设备身份码,在单卡工程中一个手机对应一个IMEI号,双卡工程中一张卡对应一个IMEI号. 下面是获得IMEI号的接口和demo code API: GSMPhone.java     中getDeviceId() GeminiPhone.java  中getDevi

怎样申请IMEI号

IMEI认证介绍: 1.国际移动设备识别码(imei:international mobile equipment identification number)是区别移动设备的标志,储存在移动设备中,可用于监控被窃或无效的移动设备. (1).imei组成如下所示,移动终端设备通过键入“*#06#”即可查得.其总长为15位,每位数字仅使用0-9的数字. (2).其中tac代表型号装配码,由ctia/babt/taf/masi全球四个标准分配中心统一发布: (3).fac代表装配厂家号码: (4).

Android实例-打电话、发短信和邮件,取得手机IMEI号(XE8+小米2)

结语: 1.不提示发短信卡住,点击没有反映,我猜想,可能是因为我用的是小米手机吧. 2.接收短信报错,我猜想可能是我改了里面的方法吧(哪位大神了解,求指教). 3.project -->options…--> users permitions. 3.1 Send SMS 3.2 Read Phone State权限:将其变成 true即可. 如果 read phone state为 false,程序将启动不了,一直黑屏(我没试,原作者是这么说的,你如果没事可以试一试,试过记得给我说一声哦).

获取手机IMEI 号和 IP

没什么可说的,直接上代码: 1 public class PhoneStateCodeUtils { 2 /** 3 * 获取手机imei串号 4 */ 5 public static String getImei(Context context) { 6 TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); 7 //设备串号 8 String imei = tm

安卓手机更改IMEI串号的方法

有时候我们需要多部手机才能完成任务,比如做微商营销推广或者app的下载量等.买多部手机费用太高,而且不现实,那有没办好的办法能够让一个手机模拟成许许多多不同的手机呢? 为了研究这个,因为最近自己也有些项目需要,网上找了许多教程,摸索了许久,在这里给大家分享一下在我自身探索测试之后的有效办法. 我们先说一下原理,一般情况app识别我们的手机是通过imei手机唯一号的,也就是说我们同一部手机只有一个唯一imei号而且固定不变的,这样也就是我们只要能在手机上修改imei或者mac等唯一标识号码,就可以

微信公众号开发API接口大全

在本文中,我们列出微信公众平台上可以使用的API接口以及举例如何在微信公众平台调用这些接口实现相应的功能. 接口调用说明: ① Appkey请使用的微信公众号,不要使用默认的trailuser ② 接口返回类型为文本.图文.及音乐三种基本消息 ③ 请在所有消息底部主动加上“技术支持 方倍工作室” ④ JSON验证网址 http://pro.jsonlint.com/ ⑤ 接口将不定期增加或更新,欢迎指出错误 ⑥ 如果有想要实现的,请在下面评论中列出并提供数据来源 ⑦ 提供的例子为天气.笑话.点歌

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

1.Luhn算法(模10算法) 通过查看ISO/IEC 7812-1:2017文件可以看到对于luhn算法的解释,如下图: 算法主要分为三步: 第一步:从右边第一位(最低位)开始隔位乘2: 第二步:把第一步所得的每一个数字加入到原来的数中,比如9*2=18,为1+8: 第三步:用以0结尾且大于第二步所获得的数的和的最小整数减去第二步所获得的合即可以获得校验位,如70-67=3,3即为校验位,如果第二步所有数字的和以0结尾,比如30.40.50等,那么校验为0: 2.IMEI校验 IMEI码由GS