参考cdma协议:IS2000_5BV
有时候卡商会参与一些测试,而测试的时候一般都是由测试方提供一个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