关于CDMA2000写号时IMSI_M计算

有时候卡商会参与一些测试,而测试的时候一般都是由测试方提供一个IMSI号刷到UIM卡里面,这就牵扯到把数字格式的IMSI转换成CDMA2000文件系统6F22(EF_IMSI_M)中要求的格式。

貌似网上介绍的中文资料不多,这里就带着例子写一下

 

6F22格式:

00 AA AA BB BB BB CC 80 DD DD

00代表CLASS=0

AA AA根据MIN前3位计算

BB BB BB根据MIN后7位计算

CC根据MNC计算

80代表IMSI_M_PROGRAMMED=1、IMSI_M_ADD_NUM=0

DD DD根据MCC计算

 

参照CDMA2000协议中6F22的格式,第1个字节和第7个字节都好搞定,基本就是标志位的设置。

其余工作在于剩下的几个字节怎么编码。

 

计算AA AA步骤

1、以MIN的前3位为计算数据,分割成3个个位数,分别命名为D1、D2、D3

2、计算数字NUM = D1 * 100 + D2 * 10 + D3 - 111(如D1、D2、D3中出现0,则当作10计算)

3、将NUM转换为2字节小端格式16进制,位数不足在前面用0补。AA AA计算完毕

 

计算BB BB BB步骤

1、以MIN第4-6位为数据,按照AA AA的计算步骤1、2算出NUM,将NUM转换为10bit的2进制,不足用0补

2、将MIN第7位单独取出来,按照标准10进制转2进制的计算方法,计算出4bit的2进制,不足用0补(修正:如果是0,按照10计算)

3、以MIN第8-10位为数据,按照AA AA的计算步骤1、2算出NUM,将NUM转换为10bit的2进制,不足用0补

4、将前3步的计算出来的共24bit的2进制数拼起来,转换成3字节小端格式16进制数。BB BB BB计算完毕

 

计算CC步骤

1、将MNC分割成2个个位数,分别命名为D1、D2

2、计算数字NUM = D1 * 10 + D2 - 11(如D1、D2中出现0,则当作10计算)

3、将NUM转换为1字节16进制。CC计算完毕

 

计算DD DD步骤

1、以MCC为数据,按照AA AA的计算方法,计算出2字节小端格式16进制,即为DD DD

 

例子:

已知IMSI号:460036591141482

此IMSI中:

MCC是460

MNC是03

MIN是6591141482

 

计算AA AA

MIN前3位659,NUM = 6 * 100 + 5 * 10 + 9 - 111 = 548 转换成2字节小端格式16进制为:24 02

 

计算BB BB BB

MIN第4-6位114,NUM = 1 * 100 + 1 * 10 + 4 - 111 = 3 转换成10bit的2进制为:0000000011

MIN第7位1,转换为4bit的2进制为:0001

MIN第8-10位482,NUM = 4 * 100 + 8 * 10 + 2 - 111 = 371 转换成10bit的2进制为:0101110011

24bit的2进制数为:000000001100010101110011,转换成3字节小端格式16进制为:73 C5 00

 

计算CC

MNC为03,NUM = 10 * 10 + 3 - 11 = 92,转换成1字节16进制为5C

 

计算DD DD

MCC为460,NUM = 4 * 100 + 6 * 10 + 10 - 111 = 359 转换成2字节小端格式16进制为:67 01

 

至此得到6F22文件内容应为

00 24 02 73 C5 00 5C 80 67 01

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值