안드로이드 유니크 아이디 알아내기...
1. IMEI : 전화가 있는 안드로이드 기기일 경우, 아닌 경우는 00000000 이거나 null 이거나... Tizz에선 null...
TelephonyManager TelephonyMgr = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
String m_szImei = TelephonyMgr.getDeviceId(); // Requires READ_PHONE_STATE
2. DEVICE ID : IMEI 처럼 만들기.. 대부분의 경우 유효
String m_szDevIDShort = "35" + //we make this look like a valid IMEI
Build.BOARD.length()%10+ Build.BRAND.length()%10 +
Build.CPU_ABI.length()%10 + Build.DEVICE.length()%10 +
Build.DISPLAY.length()%10 + Build.HOST.length()%10 +
Build.ID.length()%10 + Build.MANUFACTURER.length()%10 +
Build.MODEL.length()%10 + Build.PRODUCT.length()%10 +
Build.TAGS.length()%10 + Build.TYPE.length()%10 +
Build.USER.length()%10 ; //13 digits
3. Android ID : 신뢰할 수 없음
String m_szAndroidID = Secure.getString(getContentResolver(), Secure.ANDROID_ID);
4. MAC 주소 이용 : 에뮬레이터에선 null...
WifiManager wm = (WifiManager)getSystemService(Context.WIFI_SERVICE);
String m_szWLANMAC = wm.getConnectionInfo().getMacAddress();
5. Bluetooth MAC 주소 이용 : android.permission.ACCESS_WIFI_STATE 필요... 없으면 null
BluetoothAdapter m_BluetoothAdapter = null; // Local Bluetooth adapter
m_BluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
String m_szBTMAC;
try {
m_szBTMAC = m_BluetoothAdapter.getAddress();
} catch (Exception e) {
m_szBTMAC = null;
}
6. 위의 것을 모두 합쳐 만든 ID : MD5 이용
String m_szLongID = m_szImei + m_szDevIDShort + m_szAndroidID+ m_szWLANMAC + m_szBTMAC;
MessageDigest m = null;
try {
m = MessageDigest.getInstance("MD5");
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
m.update(m_szLongID.getBytes(),0,m_szLongID.length());
byte p_md5Data[] = m.digest();
String m_szUniqueID = new String();
for (int i=0;i<p_md5Data.length;i++) {
int b = (0xFF & p_md5Data[i]);
// if it is a single digit, make sure it have 0 in front (proper padding)
if (b <= 0xF) m_szUniqueID+="0";
// add number to string
m_szUniqueID+=Integer.toHexString(b);
}
m_szUniqueID = m_szUniqueID.toUpperCase();
출처 : http://www.pocketmagic.net/?p=1662