1

我需要在 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)?

以及如何通过响应获取手机号码?

谢谢!☺</p>

4

3 回答 3

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这意味着成功)和数据(0xffffffffffffffffffffffffff0891684125205260f5ffffffffff)

在解析您的 MSISDN 时查看E.164 。

于 2013-03-12T12:59:48.177 回答
0

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

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

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

其余的 (684125205260f5) 值 u nid 以将其并排交换每个 1 字节。例如 68 交换 86、41 交换 14 ......然后你会得到 MSISDN 号码。

于 2013-10-22T02:33:13.967 回答
0

万一以后有帮助:编码可以在 TS 51.011 上找到。文件名为 EF_MSISDN。它的标识符是 6F40。

MSISDN 前面是它的长度,然后是 TON/NPI。它也是 BCD 反转格式

于 2016-06-17T05:55:39.007 回答