MTK android imei 两个函数

俄罗斯某个大神给出的算法 

//mtk imei 加密算法,官方未公布,不同平台或许不一样需要验证。

int calc_imei(char* inp_imei, char* out_imei)
{
    char out_mask[12] = {0xAB, 0xA0, 0x6F, 0x2F, 0x1F, 0x1E, 0x9A, 0xB5, 0x0, 0x0, 0x0, 0x0};
    int i=0, j=0;


if(inp_imei == 0)
return 1;

if(strlen(inp_imei) < 15)
return 1;


    for (i=0, j=0; i < 15; i++, j++)
    {


        if (inp_imei[i] < '0' || inp_imei[i] > '9')
        {
            return 1;
        }
        out_imei[j] = (inp_imei[i] - '0');


        if (i >= 14)
            break;


        if (inp_imei[i+1] < '0' || inp_imei[i+1] > '9')
        {
             return 1;
        }
        out_imei[j] += ((inp_imei[i+1] - '0') << 4);


        out_imei[j] = out_imei[j] ^ out_mask[j];
        i++;
    }


    out_imei[j] = out_imei[j] ^ out_mask[j];


    out_imei[8] = 0xD2;//0x55; //Может быть и 0x0, ни на что не влияет
    out_imei[9] = 0x8A;//0x8B; //Может быть и 0x0, ни на что не влияет


    out_imei[10] = out_imei[11] = 0;


    for (i = 0; i < 10; i++)
    {
        if (i & 0x1)
        {
            out_imei[11] += out_imei[i];
        }
        else
        {
            out_imei[10] += out_imei[i];
        }
    }


    return 0;
}


IMEI校验位算法

//最后一位校验位计算
char GetIMEICheckDigit(char *imei)
{
	int			i;
	int			sum1=0,sum2=0,total=0;
	int			temp=0;

	for( i=0; i<14; i++ )
	{
		if((i%2)==0)
		{
			sum1 = sum1 + imei[i] - '0';
		}
		else
		{
			temp = (imei[i]-'0')*2;
			if( temp < 10 )
			{
				sum2 = sum2 + temp;
			}
			else
			{
				sum2 = sum2 + 1 + temp - 10;
			}
		}
	}

	total = sum1 + sum2;

	if( (total%10) == 0 )
	{
		return '0';
	}
	else
	{
		return (char)(((total/10) * 10) + 10 - total+'0');
	}
}




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值