uuid.jpg

[Java/Android] 유니크한 디바이스 아이디값 만들기

디바이스를 식별하기 위해 Unique Device ID값이 필요할 때가 있습니다. 쉽게 생각하면 아이폰에는 UDID(Unique Device Identifier)가 있습니다. 하지만 안드로이드에는 생각보다 간단한 문제가 아니더군요. 예를 들면 다음과 같은 방법으로 유니크한 시리얼 정보를 읽어올 수 있습니다.

하지만 위의 방법은 때에따라 빈 값이 반환되는 경우가 있다고 합니다. (저도 경험해보진 않았음) 또한 안드로이드 디바이스는 제조사에서 커스터마이징을 대책없이 하는 경우가 많아 어떤값이 나올지 일관성도 유지하기가 어렵습니다.

그렇다면 몇가지 값을 조합해서 유니크한 시리얼을 만든다면 어떨까요? 좀 더 안정적으로 사용할 수 있지 않을까 생각합니다.

위와같이 3가지 값을 조합하여 사용할 경우 좀 더 정확도 높은 유니크한 값을 만들어낼 수 있습니다.
사용자 삽입 이미지이런식으로 값이 출력됩니다. [샘플코드다운로드]

참고: http://stackoverflow.com/questions/2785485/is-there-a-unique-android-device-id

  • crony

    아이군님 블로그를 RSS로 등록해서 잘 보고 있는 리더입니다.
    안드로이드 같은 경우 디바이스의 유니크한 정보는 IMEI라는 값으로 읽어오면 됩니다. 그냥 혹시나 해서 ….

    String imei = TelephonyManager.getDefault().getDeviceId();
    if (TextUtils.isEmpty(imei)) {
    return “”;
    }

    • http://theeye.pe.kr 아이

      좋은정보 감사합니다^^
      저도 기존의 어플들의 경우에는 그렇게 써왔었는데요. 특정 디바이스나 USIM이 없는 디바이스에서는 값이 안넘어오지 않던가요?

      위의 소스에서도 보시면 deviceId값을 쓰고 있죠. 여러개의 값을 혼합해서 써서 혹시라도 디바이스아이디가 없는 경우를 피하는 대책인게 위의 방법이라 생각되는군요.

  • 송현철

    위와 같은 코드로 10개월전부터 쭈욱 썼는데..
    하나의 기기에서 다른 값이 나오기도 합니다.
    (앞자리가 FFFF.. 에서 0000.. 으로)

    크리티컬한 작업을 하실때 에는
    좀더 유의해야 할듯 하네요.

    • http://theeye.pe.kr 아이

      똑같은기기에서 FFFF로 시작하던값이 어느순간 0000으로 나오기 시작한다는거죠? 그렇다면 문제가 많긴 하겠군요.

  • 강재석

    고유번호는 MAC 어드레스가 최고입니다.
    통화안돼는 기기는 많아도 와이파이 안돼는 기기는 없으니까요. 와이파이 안돼는 안드로이드 기기 있으면 나가 죽어야죠 ㅋㅋㅋㅋ

    • http://theeye.pe.kr 아이

      문제는 WIFI를 끄면 맥주소가 안넘어오는 디바이스가 있다는겁니다. 안드로이드 SDK의 API는 신뢰를 하면 안되죠. 제조사가 하도 바꿔서..

  • Pingback: 미니의 프로그래밍 이야기

  • Pingback: 미니의 프로그래밍 이야기

  • 허버끝나

    4개 기종으로 실 테스트를 해보았습니다.
    중복되지 않고 잘나오네요.. ^^;;
    감사합니다. ^_^

    갤럭시 S UUID: FFFFFFFF-C917-212C-D958-11A94F3D97CA
    갤럭시 S2 UUID: FFFFFFFF-C421-76C9-7F0D-7EF0253DB6E4
    갤럭시 Tab 7인치 UUID: FFFFFFFF-9EAF-9658-FFFF-FFFF94DAE806
    모토로라 XT720 UUID: FFFFFFFF-E079-8E6A-E242-C0920033C587

  • 김동민

    좋은 정보 너무 감사드립니다.제 블로그에 포스팅해가도 될련지요 ..

  • 좋은정보 ㄳ합니다.
    노파심에 md5 적용해서 써야겠네용ㅎ

  • 이 방범은 문제가 약간 있습니다 (고대글이지만 딴분들을 위해서)

    1. SERIAL은 2.3부터 가능합니다 (그 전 버전은 리플렉션으로 가능한듯..)

    2. androidId는 공장초기화시 재생성됩니다

    • http://theeye.pe.kr 아이

      고대글에 좋은 정보 남겨주셔서 감사합니다.