如何通过SIM_IO从SIM卡读取MSISDN?

时间:2013-03-12 12:32:44

标签: android c android-ndk

我需要在android中阅读MSISDN,但我们必须使用.c来完成它。 我打开一个套接字将RIL_REQUEST_SIM_IO发送到ril。这是日志。

D/RILC    (  106): [0004]> SIM_IO (cmd=0xB2,efid=0x6F40,path=3F007F10,1,4,30,(null),pin2=(null),aid=(null))
...
D/RILC    (  106): [0004]< SIM_IO {sw1=0x90,sw2=0x0,ffffffffffffffffffffffffffff0891684125205260f5ffffffffff}

我是否使用了正确的参数(P1 = 1,P2 = 4,P3 = 30)?

如何通过回复获取手机号码?

谢谢!☺

3 个答案:

答案 0 :(得分:2)

你在这里有什么困惑?你想知道你告诉卡片的内容吗?所有这些信息都在ISO 7816-4和其他一些规范中,但这里是您所做的详细信息:

您向SIM发送了一条读取记录命令(0xB2) 你要求路径:

3F00 -> (MF)
7F10 -> (DF_TELECOMM)
6F40 -> (MSISDN)

您可以设置参数:

P1 (record)                   = 1  (record 1)
P2 (reference control)        = 4  (this mean use record number set in P1)
P3 (Le meaning bytes to read) = 30 (bytes)

你回来成功(SW代表状态字,你得到SW1 / SW2 = 0x9000意味着成功)和数据(0xffffffffffffffffffffffffffff0891684125205260f5ffffffffff)

在解析您的MSISDN时结帐E.164

答案 1 :(得分:0)

数据(0xffffffffffffffffffffffffffff0891684125205260f5ffffffffff)是的,它包含MSISDN

---- 08 =表示拨号长度

---- 91 =表示MSISDN国际拨号否

其余(684125205260f5)值,用于将每个1字节并排交换。例如68交换86,41交换14 ......等等,那么你将获得MSISDNnumber。

答案 2 :(得分:0)

如果以后对某些人有所帮助: 编码可以在TS 51.011上找到。文件名为EF_MSISDN。它的标识符是6F40。

MSISDN的前面是长度,然后是TON / NPI。它也采用BCD倒置格式