ICCIDは,皆様ご指摘のとおり,SIM固有の番号です。
IMSはI (International Mobile Subscriber
Identity)であり,ドコモなどの携帯事業者がSIMに割り当てた識別コードです。
したがってICCIDがIMSIを特定できれば,SIMを特定できます。
携帯電話の通信では,IMSIが電話番号の代わりをします。
SIMがないと,電話番号がなくなることになるため,通信できなくなります。
それ以外の識別コードとして,IMEIがあります。
IMEI(International Mobile Equipment
Identifier)は,国際移動体装置識別番号(端末識別番号)であり端末に割り当てられた番号です。
これはSIMに割り当てられた番号ではないので,SIMがなくても取得できます。
余談ですが,欧州の規格であるGSMは,SIMがなくても警察などの緊急呼ができるようになっています。
SIMがない場合,IMSIがない(つまり電話番号を持っていない)ので,本来,通常通信できないのですが,緊急呼の場合は,IMSIがなければIMEIを使用
ICCIDやIMSIではSIMの識別ができ,IMEIを使用すると端末の識別ができます。
おまけ
android.telephony.TelephonyManagerクラスに,getSimSerialNumber()があります。
実機を持っていないので,これでICCIDの取得が可能であるかは確認しておりませんが,エミュレータでは使用できました。
使用するときには,READ_PHONE_STATEパーミッションが必要です。
同様に,getDeviceId()でIMEIを取得できます。
”- ICCIDの取得方法について - 日本Androidの会 | Google グループ