iOS获取手机卡IMSI信息
在日常开发中,我们都需要对用户登录做一些限制,对用户做一些唯一标识,或者免密码登录的操作。
一般都是获取UUID、UDID、IDFA....等方法,但都是不能保证是唯一的,比较靠谱的方法是利用钥匙串(keyChain)保存UUID,每次都从keyChain里面取。
但是公司有的项目,想利用手机卡的信息,来免密登录,保证用户的唯一性,安卓直接可以读取IMSI信息,只要把卡换到新手机也一样可以登录,就不受设备的限制了。
1.什么是IMSI信息
名词解释
IMSI:International Mobile Subscriber Identification Number 国际移动用户识别码。
IMSI 共有 15 位,其结构如下:
MCC+MNC+MSIN ,( MNC+MSIN=NMSI )
MCC : Mobile Country Code ,移动国家码, MCC 的资源由国际电联( ITU )统一分配和管理,唯一识别移动用户所属的国家,共 3 位,中国为 460;
MNC:Mobile Network Code ,移动网络码,共 2 位,中国移动 TD 系统使用 00 ,中国联通 GSM 系统使用 01 ,中国移动 GSM 系统使用 02 ,中国电信 CDMA 系统使用 03 ,一个典型的 IMSI 号码为 460030912121001;
MSIN:Mobile Subscriber Identification Number 共有 10 位,其结构如下:
09+M0M1M2M3+ABCD
其中的 M0M1M2M3 和 MDN 号码中的 H0H1H2H3 可存在对应关系, ABCD 四位为自由分配。
这样就可以依据 IMSI 中的 MCC 和 MNC 来确定运营商了。当然知道编码规则同时还是需要知道对应编码的的国家和网络了。
注意:其实苹果是非常注重隐私保护的,所以提供的api并不能把15位都获取到,只能获取到部分信息,如下
2.具体代码方法
1.导入头文件
#import <CoreTelephony/CTCarrier.h>
#import <CoreTelephony/CTTelephonyNetworkInfo.h>
2.获取方法
- (NSDictionary *)getIMSIInfo{CTTelephonyNetworkInfo *info = [[CTTelephonyNetworkInfo alloc] init];CTCarrier *carrier = nil;NSString *radioType = nil;if (@available(iOS 12.1, *)) {if (info && [info respondsToSelector:@selector(serviceSubscriberCellularProviders)]) {NSDictionary *dic = [info serviceSubscriberCellularProviders];if (dic.allKeys.count) {carrier = [dic objectForKey:dic.allKeys[0]];}}if (info && [info respondsToSelector:@selector(serviceCurrentRadioAccessTechnology)]) {NSDictionary *radioDic = [info serviceCurrentRadioAccessTechnology];if (radioDic.allKeys.count) {radioType = [radioDic objectForKey:radioDic.allKeys[0]];}}}//运营商可用BOOL use = carrier.allowsVOIP;//运营商名字NSString *name = carrier.carrierName;//ISO国家代码NSString *code = carrier.isoCountryCode;//移动国家代码NSString *mcc = [carrier mobileCountryCode];//移动网络代码NSString *mnc = [carrier mobileNetworkCode];NSDictionary *dict =@{@"name":name,@"code":code,@"mcc":mcc,@"mnc":mnc};NSLog(@"运营商名字:%@,ISO国家代码:%@,移动国家代码:%@,移动网络代码:%@",name,code,mcc,mnc);return dict;
}
我们进入系统CTCarrier里面也就只有这几个属性,如下图
3.总结:
iOS获取手机卡IMSI信息是不全的,只能获取部分的信息,所以想利用IMSI作为绑定用户,作为唯一标识,做免密登录是行不通的,只能另想他法。
希望苹果以后能更新这方面的api吧!
iOS获取手机卡IMSI信息相关推荐
- ios获取区域服务器信息,ios获取服务器数据
ios获取服务器数据 内容精选 换一换 调用API出错后,将不会返回结果数据.调用方可根据每个API对应的错误码来定位错误原因.当调用出错时,HTTP请求返回一个4xx或5xx的HTTP状态码.返回的 ...
- iOS获取WIFI配置信息,WIFI名称、网关(路由器地址)、本机IP地址、DNS
DEMO地址(看代码,什么就都有了):https://github.com/SimpleBraver/test_wifi.git 1.获取当前手机WIFI名称信息 #import <System ...
- ios获取sim卡信息以及手机号码
1.加入一个Framework(CoreTelephony.framework).2.引入头文件#import <CoreTelephony/CTTelephonyNetworkInfo.h&g ...
- 关于IOS获取本地通讯录信息(包含iOS9.0前后)
在ios开发当中,获取用户本地的通讯录功能愈加频繁的出现,七两自己也在自己公司的项目当中遇到的获取本地的通讯录信息的功能(俗称"种子用户功能",太可怕了).对此七两总结了自己使用本 ...
- iOS 获取键盘相关信息
一,在需要的地方添加监听 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onKeyboardWil ...
- iOS 获取手机型号信息大全
我们在网上查到的一般都是被人给过的已知手机型号名,但是如果有新设备的话我们怎么获得呢,这里贴出个网址供查询https://www.theiphonewiki.com/wiki/Models,这样我们就 ...
- Android 获取设备各种信息以及其它
做手机开发,想必都希望获取手机号码吧,android中有一个类android.telephony.TelephonyManager提供这个功能. TelephonyManager tm = (Tele ...
- Android获取手机基站信息并进行基站定位(基站定位原理)
一,首先普及一下手机基站信息中相关的专业词汇: 通过TelephonyManager 获取lac:mcc:mnc:cell-id(基站信息)的解释: MCC,Mobile Country Code, ...
- ios获取设备信息总结
本文转载至 http://blog.csdn.net/decajes/article/details/41807977 1.获取设备的信息 [objc] view plaincopy UIDevice ...
- iOS获取iPhone系统等信息和服务器返回空的异常处理
前言: 在项目中经常会遇到需要获取系统的信息来处理一些特殊的需求和服务端返回为空的处理,写在这里只是笔记一下. 获取设备的信息 NSLog(@"globallyUniqueString=%@ ...
最新文章
- halcon:(4)halcon中XLD的概念与应用----汽车引擎盖圆孔检测
- Instagram个性化推荐工程中三个关键技术是什么?
- Exchange日常管理之二十二:配置保留策略
- 图像处理——基于OpenCV的canny边缘检测
- maven 打包编译_您是否真的想加快Maven的编译/打包速度? 那么takari生命周期插件就是答案。...
- Android官方开发文档Training系列课程中文版:使用Fragment构建动态UI之构建灵活的UI
- 张首晟教授:区块链让社会变得更加公平 与人工智能的结合令人激动 | IT领袖峰会...
- 如何使用RMAN duplicate搭建12C的Data Guard环境?
- SOA企业需要考虑的事项
- 2019年美赛B题思路详解
- PDF拆分页面,免费拆分为多个PDF
- wps2016向程序发送命令_word文档打开,提示“向程序发送命令时出现问题”的原因...
- Git reset --hard commit_id 和 git reset --soft commit_id
- 第十九章 存储和使用流数据(BLOBs和CLOBs)
- php二手房系统,phpwind房产新版上线 抢先体验二手房新功能
- 二战总结(信息与通信工程)
- 美国食品药品监督管理局宣布将研究区块链技术
- 案例分析 - 百度传课网易云课堂在线教育平台竞品分析
- 面对元宇宙算力瓶颈,AI算力专家宁畅开出三大秘方
- 电视上的腾讯会员和手机上的一样吗
热门文章
- 20180925-6 四则运算试题生成
- No.4 Linux用户、组的创建、修改和权限的修改
- NYOJ-769乘数密码,逆元解法;
- [UITableViewCell]小结
- ASP.NET连接SQL、Access、Excel数据库(三)——工厂模式
- Android 中的长度单位详解 dp、sp、px、in、pt、mm 转载
- javascript 的线程问题
- Html可以输入的下拉框设计
- Java设计模式之接口型模式总结
- Android系统自带样式(@android:style/) (转)