2012-01-11 2 views
1

TelephonyManager.getDeiceId()은 IMEI 번호의 14 자리 만 반환합니다. 하지만 설정 -> 전화 -> 상태에서 15 자리가 표시됩니다.TelephonyManager.getDeviceId는 14 자리 숫자 만 반환합니다.

전화 설정에 표시되는 15 자리를 가져오고 싶습니다.

+0

를 시도? android.telephony.TelephonyManager.getDeviceId() ??? – confucius

+0

예 TelephonyManager.getDeiceId() 만 시도했습니다 – Sali

답변

3

IMEI (14 자리)는 검사 숫자로 보완됩니다. 수표 숫자는 IMEI 수표에 전송 된 숫자 중 부분이 아닙니다. 체크 디지트는 과 같이 수동 전송 오류를 방지해야합니다. 고객이 도난당한 휴대폰을 운영자의 고객 지원 센터에 등록하면

http://www.tele-servizi.com/Janus/texts/imei.txt

http://en.wikipedia.org/wiki/International_Mobile_Equipment_Identity

+0

수표 번호를 얻거나 계산하는 방법은 무엇입니까? – Sali

+3

심각하게? 링크를 읽어야합니까? len http://en.wikipedia.org/wiki/International_Mobile_Equipment_Identity#Check_digit_computation –

1


TelephonyManager mTelephonyMgr; 
mTelephonyMgr = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); 
mTelephonyMgr.getDeviceId() 

이 내가 수행하고 난 모든 15 개 자리가이 U 도움을 줄 수 있습니다 얻는 것입니다 ...

1

또는 당신은 할 수 수동으로 14 자리 IMEI 번호의 체크섬을 계산하십시오. 예 :

private int GetCheckSumDigit(String id) { 
     int digit = -1; 
     try{ 
      if(id.length() == 14) 
      { 
       String str = ""; 
       char[] digits = new char[id.length()]; 
       id.getChars(0, id.length(), digits, 0); 
       for(int i=0; i<digits.length; i++) 
       { 
        String ch = digits[i]+""; 
        if((i+1)%2==0) 
        { 
         int x = Integer.parseInt(digits[i]+""); 
         x *= 2; 
         ch = x+""; 
        } 
        str += ch; 
       } 
       digits = new char[str.length()]; 
       str.getChars(0, str.length(), digits, 0); 
       int total = 0; 
       for(int i=0; i<str.length(); i++) 
        total += Integer.parseInt(digits[i]+""); 
       // 
       int count = 0; 
       while((total+count)%10 != 0) 
        count++; 
       digit = count; 
      } 
     }catch(Exception exx) 
     { 
      exx.printStackTrace(); 
     } 
     return digit; 
    } 

행운을 비네.

0

일부 장치가 마지막 숫자를 추가하지 마십시오, 우리는 대신 Luhn algorithm를 사용하여 마지막 숫자를 계산해야 : 당신은 무엇을

private int getImeiCheckDigit(String imei14digits) { 
    if (imei14digits == null || imei14digits.length() != 14) { 
     throw new IllegalArgumentException("IMEI should be 14 digits"); 
    } 
    int[] imeiArray = new int[imei14digits.length()]; 
    final int DIVIDER = 10; 
    char[] chars = imei14digits.toCharArray(); 
    for (int i = 0; i < chars.length; i++) { 
     imeiArray[i] = Character.getNumericValue(chars[i]); 
    } 
    int sum = 0; 
    for (int i = 0; i < imeiArray.length; i++) { 
     if (i % 2 == 0) { 
      sum += imeiArray[i]; 
     } else { 
      int multi = imeiArray[i] * 2; 
      if (multi >= DIVIDER) { 
       sum += multi % DIVIDER; 
       sum += multi/DIVIDER; 
      } else { 
       sum += multi; 
      } 
     } 
    } 
    return (DIVIDER - sum % DIVIDER) % DIVIDER; 
} 
관련 문제