简介:3GPP TS 11.11的EFADN域详细介绍了手机SIM卡中Alpha Identifier域的组织方法,因为工作中使用到Mailbox name解析,而Mailbox name的解析方法是参考EFADN的Alpha Identifier域,所以在该文对此做出详细的解释。
1. 引子和定义
CPHS Phase 2(Version Number:4.2)文档中,在Data field 6F17:Mailbox Numbers的描述中,有用到Alpha Identifier域,而在一些平台中,为了兼容SIM卡设置,在NVRAM中保存Mailbox也会使用该域的组织方法。为了能正确的设置该域,则必须了解该域的组织方法。
在3GPP TS 11.11 10.5.1 EFADN (Abbreviated dialling numbers)中,定义了Alpha Identifier的编码方法:
Coding:
this alpha‑tagging shall use either
- the SMS default 7‑bit coded alphabet as defined in TS 23.038 [12] with bit 8 set to 0. The alpha identifier shall be left justified. Unused bytes shall be set to 'FF'; or
- one of the UCS2 coded options as defined in annex B.
因为mailbox和AND在这里的编码一致,所以本文根据便利性以mailbox为例。
2. 7bit编码Alphabet
使用的字符请参考3G TS 23.038。在Alpha Identifier中,每个字节为一个最高bit位填充0的7bit字符,无用字节填充0xFF。
在设置Mailbox时,当你在名称域输入Mailbox作为Name,你可以看到SIM卡上6F17域的Alpha Identifier域为:
4D 61 69 6C 62 6F 78 FF FF FF
上面的域长度,根据SIM卡的不同而不同。
从3G TS 23.038 6.2.1 GSM 7 bit Default Alphabet可以查到,这些字符对应下面字符串:
Mailbox
之后没有用到的数据位用FF来填充。
下面分别介绍Annex B中的80、81、82编码。
3. 80编码
参考3GPP TS 11.11 Annex B (normative): Coding of Alpha fields in the SIM for UCS2
第一个字节为0x80,为80编码,则后面依次跟住UCS2的MSO和LSO,如下图所示:
Octet 1 | Octet 2 | Octet 3 | Octet 4 | Octet 5 | Octet 6 | Octet 7 | Octet 8 | Octet 9 |
'80' | Ch1MSO | Ch1LSO | Ch2MSO | Ch2LSO | Ch3MSO | Ch3LSO | 'FF' | 'FF' |
例如,我们在Mailbox以”李鸿章”作为用户名,从SIM卡上6F17得到的信息为:
80 67 4E 9E 3F 7A E0 FF FF FF
0x674E为李的UCS2编码;
0x9E3F为鸿的UCS2编码;
0x7AE0为章的UCS2编码。之后没有用到的数据位用FF来填充。
4. 81编码
参考3GPP TS 11.11 Annex B (normative): Coding of Alpha fields in the SIM for UCS2
第一个字节为0x81,即表示81编码。
第二个字节表示字符的个数。
第三个字节是一个16位数字基准的15到8比特位,也就是说这个数字基准的bit16和bit7到bit1为0。
第四个字节如果bit8为0,则bit7到bit1表示一个GSM Default Alphabet character,也就是一个7bit Default编码字符(可查看3G TS 23.038 6.2.1 GSM 7 bit Default Alphabet);如果bit8为1,则bit7到bit1表示一个偏移值,该偏移值与上述的16位数字基准可构成一个UCS2编码。
之后的有效字节和第四个字节的定义一致。
举例如下:
Octet 1 | Octet 2 | Octet 3 | Octet 4 | Octet 5 | Octet 6 | Octet 7 | Octet 8 | Octet 9 |
'81' | '05' | 'CE' | 'B1' | 'AB' | 'AB' | '53' | 'FF' | 'FF' |
第二个字节为0x05,表示之后的字符为5个;
第三个字节为0xCE,生成数字基准,二进制表示为0110 0111 0000 0000,即是0x6700;
第四个字节为0xB1,bit8为1,0x6700+0x31=0x6731,为朱的UCS2编码;
第五个字节为0xAB,bit8为1,0x6700+0x2B=0x672B,为末的UCS2编码;
第六个字节为0xAB,bit8为1,0x6700+0x2B=0x672B,为末的UCS2编码;
第七个字节为0x53,bit8为0,为7bit编码0x53,即是S;
第八个字节为0xFF,bit8为1,0x6700+0x7F=0x677F,为板的UCS2编码。
之后的字节不用关注。
这里组成的字符串为:朱末末S板
5. 82编码
参考3GPP TS 11.11 Annex B (normative): Coding of Alpha fields in the SIM for UCS2
第一个字节为0x82,即表示82编码。
第二个字节表示字符的个数。
第三个字节和第四个字节,组成一个16bit数字基准。
第五个字节如果bit8为0,则bit7到bit1表示一个GSM Default Alphabet character,也就是一个7bit Default编码字符;如果bit8为1,则bit7到bit1表示一个偏移值,该偏移值与上述的16位数字基准可构成一个UCS2编码。
之后的有效字节和第五个字节的定义一致。
举例如下:
Octet 1 | Octet 2 | Octet 3 | Octet 4 | Octet 5 | Octet 6 | Octet 7 | Octet 8 | Octet 9 |
'82' | '05' | '51' | 'B0' | '9C' | '80' | '80' | '2D' | '53' |
第二个字节为0x05,表示之后的字符为5个;
第三、四个字节组成数字基准0x51B0;
第五个字节为0x9C,bit8为1,0x51B0+0x1C=0x51CC,为凌的UCS2编码;
第六个字节为0x80,bit8为1,0x51B0+0x00=0x51B0,为冰的UCS2编码;
第七个字节为0x80,bit8为1,0x51B0+0x00=0x51B0,为冰的UCS2编码;
第八个字节为0x2D,bit8为0,为7bit编码0x2D,即为 - ;
第九个字节为0x53,bit8为1,为7bit编码0x53,即为S。
之后的字节不用关注。
这里组成的字符串为:凌冰冰-S