今天手机不幸又发不出短信了,打10086确认了一下没停机之后就到*#*#4636#*#*里面看smsc的设置,发现果然和上次发不了短信一样的毛病,没办法,只好找这SMSC的值了。恰好上次看到了一片文章,讲到了这个值的算法,干脆今天就写个程序出来吧,免得下次又烦。主要的函数如下,并附上打包好的可执行jar文件。

1. 找到自己所在地的短信中心号码。比如南京就是+8613800250500
2. 取“+”后面的数字,在最后补上“F”
3. 把数字两两反转成为68 31 08 20 05 05 F0这样的结果
4. 然后字符串前要面加上08 91, 如果你去香港澳门,你的地址信息的长度少了一点,可能要改为0791。08 地址信息的长度是八位字节(包括91),91 SMSC地址格式(TON/NPI)用国际格式号码(在前面加‘+’)
5. 最后你的SMSC编码就是0891683108200505F0
6. 打开拨号画面,按*#*#4636#*#*, 选手机信息,拉到下面的SMSC
7. 把0891683108200505F0填进去, 按更新
8. 设置到飞行模式后关闭飞行模式,应该就可以了,不行就重启下手机~

private String generate(String _number) {
    char[] number = (_number + 'F').toCharArray();
    char tmp;
    for (int i = 0; i < 14; i++) {
        tmp = number[i];
        number[i] = number[i + 1];
        number[i + 1] = tmp;
        i++;
    }
    return "0891" + String.valueOf(number);
}

附上适用于江苏地区的编码器,下载后解压zip文件结果的jar文件即是。请先安装JRE

SMS Generator.jar