Windows Phone 7 SIM卡信息获取

简介: public class SIM { #region 平台调用 [DllImport("cellcore.
    public class SIM
    {
        #region 平台调用
        [DllImport("cellcore.dll")]
        public extern static int SimInitialize(int dwFlags, IntPtr lpfnCallback, int dwParam, ref IntPtr lphSim);

        [DllImport("cellcore.dll")]

        public extern static int SimDeinitialize(IntPtr hSim);

        [DllImport("cellcore.dll")]
        public extern static int SimReadRecord(IntPtr hSim, int dwAddress, int dwRecordType, int dwIndex, byte[] lpData, int dwBufferSize, ref int dwSize);

        int EF_ICCID = 0x2fe2;
        int SIM_RECORDTYPE_TRANSPARENT = 1;
        #endregion



        //返回Sim卡背面的20位ICCID 
        public string SimSerialNumber()
        {
            IntPtr hSim = default(IntPtr);
            byte[] iccid = new byte[10];
            int dwsize = 0;
            SimInitialize(0, IntPtr.Zero, 0, ref hSim);
            SimReadRecord(hSim, EF_ICCID, SIM_RECORDTYPE_TRANSPARENT, 0, iccid, iccid.Length, ref dwsize);//在这里获取了SIM卡ID
            SimDeinitialize(hSim);
            return FormatAsSimString(iccid);
        }

        /// <summary>
        /// 对SIM卡ID进行格式化
        /// </summary>
        /// <param name="iccid">byte格式的ID</param>
        /// <returns>字符串格式</returns>
        private static string FormatAsSimString(byte[] iccid)
        {
            string rawString = GetRawIccIDString(iccid);
            return String.Format("{0} {1} {2} {3}", rawString.Substring(0, 6), rawString.Substring(6, 5), rawString.Substring(11, 4), rawString.Substring(15, 4));
        }

        /// <summary>
        /// 格式转换函数
        /// </summary>
        /// <param name="iccid"></param>
        /// <returns></returns>
        private static string GetRawIccIDString(byte[] iccid)
        {
            System.Text.StringBuilder builder = new System.Text.StringBuilder();
            int i = 0;
            while (i < iccid.Length)
            {
                byte b = iccid;
                builder.Append(ConvertInt4PairToString(b));
                Math.Max(System.Threading.Interlocked.Increment(ref i), i - 1);
            }
            return builder.ToString();
        }

        private static string ConvertInt4PairToString(byte byteValue)
        {
            return ((byte)(byteValue << 4) | (byteValue >> 4)).ToString("x2");
        }
    }


相关文章
|
1月前
|
存储 Linux 网络安全
都2023年了还不了解?使用FileZilla搭建信息文件服务器(Windows7)
都2023年了还不了解?使用FileZilla搭建信息文件服务器(Windows7)
|
1月前
|
Docker Windows 容器
Windows Docker Desktop 无法启动 自动退出报错信息为:Docker Desktop -Unexpected WsL error An unexpected error was e
Windows Docker Desktop 无法启动 自动退出报错信息为:Docker Desktop -Unexpected WsL error An unexpected error was e
99 0
|
应用服务中间件 nginx Windows
windows中查看本机ip,网关信息,端口号
windows中查看本机ip,网关信息,端口号
200 0
|
Windows
电脑故障由于其配置信息(注册表中的)不完整或已损坏,Windows 无法启动这个硬件设备. (代码 19)
电脑故障由于其配置信息(注册表中的)不完整或已损坏,Windows 无法启动这个硬件设备. (代码 19)
752 0
|
Web App开发 XML 网络协议
|
Windows
WINDOWS调用出错后,得到信息字串
WINDOWS调用出错后,得到信息字串
40 0
|
6月前
|
开发框架 Prometheus 监控
Windows监控:基于Prometheus+Grafana监控CPU、内存、磁盘、网络、GPU信息
Windows监控:基于Prometheus+Grafana监控CPU、内存、磁盘、网络、GPU信息
2725 0
Windows监控:基于Prometheus+Grafana监控CPU、内存、磁盘、网络、GPU信息
|
Android开发 iOS开发 Windows
Windows Phone 寿终正寝了,这些经典机型你还记得吗?
不久前,随着最后一家WP手机厂商惠普宣布取消今后Windows Phone的研发计划,以及微软官方声明对WP8.1系统今后所有升级维护的终止,WP手机,作为曾经和安卓手机、苹果手机并驾齐驱的三大智能手机之一,正式寿终正寝。
1314 0
Windows Phone 寿终正寝了,这些经典机型你还记得吗?
|
Web App开发 JavaScript 前端开发
JavaScript 技术篇-js代码获取当前操作系统信息、浏览器版本信息实例演示,windows NT版本对照表
JavaScript 技术篇-js代码获取当前操作系统信息、浏览器版本信息实例演示,windows NT版本对照表
315 0
JavaScript 技术篇-js代码获取当前操作系统信息、浏览器版本信息实例演示,windows NT版本对照表
|
缓存 数据安全/隐私保护 Windows
windows 技巧篇-清除共享地址访问缓存信息,共享路径临时访问用户切换方法
windows 技巧篇-清除共享地址访问缓存信息,共享路径临时访问用户切换方法
565 0
windows 技巧篇-清除共享地址访问缓存信息,共享路径临时访问用户切换方法