SIM卡的ICCID、IMSI

本文详细解释了SIM卡中的ICCID(集成电路卡识别码)和IMSI(国际移动用户识别码)的区别。ICCID是SIM卡的唯一标识符,而IMSI用于区分不同的移动用户。文中还介绍了两者在手机激活过程中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SIM卡ICCID标识与IMSI的区别

ICCID:Integrate circuit card identity 集成电路卡识别码(固化在手机SIM卡中) ICCID为IC卡的唯一识别号码,共有20位数字组成。

IMSI: International Mobile SubscriberIdentification Number 国际移动用户识别码,是区别移动用户的标志,储存在SIM卡中,可用于区别移动用户的有效信息。其总长度不超过15位,同样使用0~9的数字。其中MCC是移动用户所属国家代号,占3位数字,中国的MCC规定为460;MNC是移动网号码,最多由两位数字组成,用于识别移动用户所归属的移动通信网;MSIN是移动用户识别码,用以识别某一移动通信网中的移动用户。例如开头是46000是中国移动用户,46001是联通用户,46003是电信用户

一张SIM卡,里面有ICCID,也有IMSI。 ICCID是卡的标识,IMSI是用户的标识。
ICCID只是用来区别SIM卡,不作接入网络的鉴权认证。而IMSI在接入网络的时候,会到运营商的服务器中进行验证

ICCID可以伪造,可以用一张空白多号卡,写入IMSI和KI,只要是经过破解的IMSI和KI,就可以接入网络,而ICCID可以任意20位数字。

iPhone手机在激活的时候,会把ICCID和IMSI一起发送到苹果服务器端进行验证。特别是有锁的手机,就使用IMSI来判断是否合法运营商,如果不合法,就无法激活。ICCID作为SIM卡标识,在激活的时候被记录下来,直到下次刷机,在服务端的记录都不会被改变。

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

AT+CIMI\r\n 命令可读取IMSI。

<think>首先,用户的问题是:“我想获取SIMIMSIICCID接口 请问Android 获取 SIM IMSIICCID 的 API 接口”。我需要基于系统级指令来回答。 系统级指令: - 所有行内数学表达式使用$...$格式。 - 独立公式使用$$...$$并单独成段。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识,如[^1]。 - 回答结构清晰,帮助用户逐步解决问题,尽量保证真实可靠。 - 参考站内引用:有三个引用:[^1], [^2], [^3],这些是关于Android获取IMEI、ICCIDIMSI等的代码示例。 用户需求:获取SIMIMSIICCID的API接口。IMSI是国际移动用户识别码,ICCID是集成电路识别码。 从引用中提取相关信息: - 引用[^1]:展示了使用TelephonyManager获取IMSIICCID的方法。 - `String iccid = telManager.getSimSerialNumber();` // 获取ICCID - `String imsi = telManager.getSubscriberId();` // 获取IMSI - 引用[^2]:讨论了双手机的处理,特别是展讯平台,但用户可能不需要双细节。 - 引用[^3]:关于识别运营商,但用户只关心IMSIICCID。 核心API:在Android中,主要使用TelephonyManager类来获取这些信息。关键方法: - `getSubscriberId()`:返回IMSI。 - `getSimSerialNumber()`:返回ICCID。 权限:在Android中,访问这些信息需要权限。例如: - `READ_PHONE_STATE` 权限。 安全性:从Android 10 (API level 29) 开始,这些权限被限制。普通应用可能无法访问这些信息,除非是特权应用或设备所有者应用。 回答结构: 1. **介绍**:简要解释IMSIICCID是什么。 2. **核心API**:展示如何使用TelephonyManager获取这些信息。 3. **权限要求**:说明所需的权限。 4. **注意事项**:讨论Android版本兼容性和限制。 5. **代码示例**:提供简单的Java或Kotlin代码示例。 6. **相关问题**:生成相关问题。 确保使用中文回答。 生成相关问题:基于主题,生成2-3个相关问题。 添加引用:在相关段落末尾添加[^1], [^2], [^3]作为引用标识。引用来自提供的站内引用。 现在,构建回答: - 开头:直接回答问题。 - 步骤: - 步骤1:获取TelephonyManager实例。 - 步骤2:调用方法获取IMSIICCID。 - 步骤3:处理权限和兼容性。 - 代码示例:提供简单代码。 - 结尾:相关问题。 引用应用: - 当提到获取IMSIICCID时,引用[^1],因为它有直接代码。 - 如果需要双处理,引用[^2]。 - 运营商识别引用[^3]。 用户没有指定双,所以专注于单场景。 最终回答结构: 1. 介绍IMSIICCID。 2. API解释。 3. 权限说明。 4. 代码示例。 5. 注意事项。 6. 相关问题。</think>### Android 获取 SIM IMSIICCID 的 API 接口 在 Android 开发中,获取 SIM IMSI(国际移动用户识别码)和 ICCID(集成电路识别码)主要通过 `TelephonyManager` 类实现。IMSI 用于识别用户所属运营商,而 ICCIDSIM 本身的唯一序列号。以下我将逐步解释核心 API、权限要求和实现方法,确保回答真实可靠(基于 Android 官方文档和常见实践)。 #### 1. **核心 API 接口** - **`TelephonyManager` 类**:这是 Android 系统提供的核心服务类,用于访问 SIM 信息。 - **获取 IMSI**:使用 `getSubscriberId()` 方法。该方法返回 SIM IMSI 字符串。 - **获取 ICCID**:使用 `getSimSerialNumber()` 方法。该方法返回 SIM ICCID 字符串。 - 这些方法在 `android.telephony.TelephonyManager` 类中定义,适用于大多数 Android 设备[^1]。 #### 2. **权限要求** - 在 Android 中,访问 IMSIICCID 需要声明 `READ_PHONE_STATE` 权限。此权限必须在 `AndroidManifest.xml` 文件中添加: ```xml <uses-permission android:name="android.permission.READ_PHONE_STATE" /> ``` - **运行时权限**:从 Android 6.0(API level 23)开始,还需在代码中动态请求该权限: - 使用 `ActivityCompat.requestPermissions()` 或类似方法处理权限请求。 - 未处理权限可能导致安全异常(如 `SecurityException`)。 #### 3. **代码实现示例** 以下是一个简单的 Java 代码示例,展示如何获取 IMSIICCID: ```java import android.content.Context; import android.telephony.TelephonyManager; import androidx.core.app.ActivityCompat; // 用于权限处理 public class SimCardUtils { public static void getSimInfo(Context context) { // 获取 TelephonyManager 实例 TelephonyManager telManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); // 检查权限(简化示例,实际需动态请求) if (ActivityCompat.checkSelfPermission(context, Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED) { // 获取 IMSI String imsi = telManager.getSubscriberId(); // 返回 IMSI 字符串 // 获取 ICCID String iccid = telManager.getSimSerialNumber(); // 返回 ICCID 字符串 // 输出结果(实际应用中可处理或存储) Log.d("SimInfo", "IMSI: " + imsi + ", ICCID: " + iccid); } else { // 处理权限未授予的情况 Log.e("SimInfo", "READ_PHONE_STATE permission not granted"); } } } ``` - **说明**: - `getSubscriberId()` 和 `getSimSerialNumber()` 是同步方法,调用时需确保在主线程或异步任务中执行。 - 如果 SIM 未插入或设备不支持,这些方法可能返回 `null`[^1]。 - 对于双设备,需使用 `TelephonyManager` 的扩展方法(如 `createForSubscriptionId(int subId)`),但单场景下上述代码通用[^2]。 #### 4. **注意事项** - **Android 版本限制**: - 在 Android 10(API level 29)及更高版本,普通应用无法访问 IMSIICCID 等敏感信息,除非应用是设备所有者或特权应用(如系统应用)。这是出于隐私保护考虑。 - 建议检查设备 API level:`Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q`。 - **返回值处理**: - IMSI 格式通常为 15 位数字(如 `310150123456789`),ICCID 为 19-20 位数字。 - 可结合运营商识别逻辑(如解析 MCC/MNC),但用户问题聚焦于 API 接口,此处不展开[^3]。 - **安全性警告**: - IMSIICCID 是敏感信息,存储或传输时需加密。 - 避免在非必要场景使用,以防违反 Google Play 政策。 #### 5. **相关问题** 基于您的查询,以下是几个扩展问题: 1. 如何在 Android 双设备中分别获取两张 SIM IMSIICCID? 2. Android 10 及以上版本如何替代 IMSI/ICCID 获取方法以满足隐私政策? 3. 如何通过 IMSI 识别 SIM 所属运营商(如中国移动、中国联通)? 如果您需要双处理、权限请求完整代码或运营商识别逻辑,我可以进一步详细解答。 [^1]: 引用[1]:获取手机IMEI/ICCID/IMSI。TelephonyManager telManager = (TelephonyManager) this .getSystemService(Context.TELEPHONY_SERVICE); String imsi =telManager.getSubscriberId(); //取出IMSI:国际移动用户识别码(就是识别你是哪个运营商的SIM) String iccid =telManager.getSimSerialNumber(); //取出ICCID:集成电路识别码(固化在手机SIM中,就是SIM的序列号)很容易伪造哦。 [^2]: 引用[2]:关于android各种双手机获取imei,imsi的处置(mtk,展讯,高通等)。 下面是展讯平台的(貌似市面上手机不多啊): private static void initSpreadDoubleSim() { try { Class<?> c = Class .forName("com.android.internal.telephony.PhoneFactory"); Method m = c.getMethod("getServiceName", String.class, int.class); spreadTmService = (String) m .invoke(c, Context.TELEPHONY_SERVICE, 1); TelephonyManager tm = (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE); imsi_1 = tm.getSubscriberId(); ... }。 [^3]: 引用[3]:读取SIM相关信息。if(short_str.equals("898600")||short_str.equals("898602")){String chanel="移动";}else if(short_str.equals("898601")){String chanel="电信";}else if(short_str.equals("898603")){String chanel="联通";}。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值