2012-05-22 8 views
11

MSISDN에 대해 몇 가지 질문이 있습니다. 내가 이해 :MSISDN : SIM 카드 데이터입니까? 블랙 베리와 안드로이드에서 제공되는 모든 기능이 MSISDN을 안정적으로 가져 오지 못하는 이유는 무엇입니까?

  1. MSISDN 그것은 내가 더 알아야 할 IMSI

되지 않습니다 기본적으로 전화 번호

  • 것은 다음과 같습니다

    1. 저장 태워 MSISDN 번호 (인가) SIM 카드에? 그렇다면 모든 공급자가 SIM 카드에 MSISDN 정보가 있는지 확인합니까? 아니오 인 경우, 명확히하기 위해, 프로그래밍 코드 중 어느 것도 MSISDN 번호를 가져올 수 없습니까?

    2. 일부 사람들은 아래 코드와 같이 MSISDN을 가져 오는 것이 좋습니다. 그러나 장치에 "내 전화 번호"가 설정되지 않은 경우 두 코드는 모두 null을 반환합니다. 그 반대의 경우, "내 전화 번호"가 설정된 경우이를 반환합니다. 따라서 질문은 "내 전화 번호"가 MSISDN과 같습니까?

      TelephonyManager.getLine1Number(); -> 안드로이드

      Phone.getDevicePhoneNumber(true);에 대한 - 블랙 베리

      위의 코드로
    3. 를 들어, 반환 문자열 데이터가 SIM 카드에서 장치 자체 또는에서 페치>?

  • 답변

    16

    나는이 문제에 대한 통찰력을 가지고 있습니다.

    1. MSISDN 그러나 대부분의 네트워크 제공 업체 (남아프리카 공화국에서 모든 공급자)가 SIM 카드에 MSISDN를 저장하지 않는, SIM 카드에 저장할 수 있습니다. 여기에는 몇 가지 이유가 있습니다. 가장 주목할만한 이유는 다음과 같습니다.
      • 동적 MSISDN 할당 : 선불 SIM은 언젠가 처음 사용할 때 MSISDN으로 할당됩니다. 이는 네트워크에 사용 가능한 MSISDN 풀이 있고 새로운 선불 SIM이 온라인 상태가 될 때마다 할당 할 수 있음을 의미합니다. 즉, SIM을 출하 할 때 아직 MSISDN이 없기 때문에 SIM을 발송하기 전에 MSISDN을 저장할 수 없습니다. 일부 네트워크는 일정 기간 사용하지 않으면 MSISDN 할당이 만료됩니다. 특히 사용 가능한 숫자가 낮아질 경우이 값을 사용 가능한 풀로 반환해야합니다.
      • 휴대 전화 번호 휴대 성 : 일부 국가에서는 휴대 전화 가입자가 MSISDN을 유지하면서 네트워크를 변경할 수 있습니다. 즉, MSISDN이 하나의 네트워크 인 SIM에서 다른 네트워크의 SIM으로 이동합니다.

    그래서 사용자는 종종 SIM이 비어있는에 MSISDN 항목으로 끝납니다. 사용자는 여전히 SIM에 MSISDN을 저장할 수 있지만 임의의 번호를 저장할 수 있으며 가입자의 실제 전화 번호로 설정되거나 보증되지는 않습니다.

          2. SIM 카드에 저장된 전화 번호를 가져 오라고 요청한 전화. 번호가 설정되지 않은 경우 가져 오지 않으며 잘못된 번호가 설정되어 있으면 잘못된 세부 정보가 표시됩니다.

          3.이 문자열은 SIM 자체에서 가져옵니다.

    이동 통신 사업자가 헤더에 MSISDN을 포함 할 때 MSISDN을 감지하는 유일한 신뢰할 수있는 방법은 WAP/WEB를 통해 이루어집니다 (일부 웹 뷰를 통해 어떤 헤더가 통과하는지 확인할 수 있음). 네트워크가 지원하는 경우 및 사용자가 모바일 데이터에있는 경우 - 즉, 사용자가 WiFi를 사용중인 경우에는 작동하지 않습니다.

    내가 생각할 수있는 다른 메커니즘 (내가 생각할 수있는 유일한 보장 메커니즘)은 USSD 세션을 통해 이루어 지므로 항상 올바른 MSISDN을 운영자로부터 얻지 만 프로그램 적으로 열린 방법을 찾지 못했습니다. USSD 세션 및 응답 읽기 (적어도 Android에서). 나는 그의 출력이 MSISDN 인 USSD 서비스를 가지고 있지만, 불행하게도 아직 유용하지 않다.

    +0

    고맙습니다, darryn.ten. 나는 많은 사람들이 당신의 대답에서 많은 이득을 얻을 것이라고 믿습니다. 그리고 GPRS 모드에서 헤더를 통해 MSISDN을 얻으려고합니다. –

    1

    당신이 당신의 질문을 게시 이후 아무도 지난 시간에 응답하지 않기 때문에, 여기 (단지 경험이 내가이 분야의 전문가가 아니라고하지만) 내가 아는 것입니다 :

    1. MSISDN은 전화 번호; 사람들이 전화 할 수있는 번호.
    2. SIM 카드를 변경하거나 (다른 운영자에게 업그레이드 또는 변경) SIM 카드에 "불에 타지"말고 전화 번호 = MSISDN을 유지하십시오. 나는 SIM 카드 ID에서 MSISDN으로 비밀리에 전화를 걸거나 데이터를 전송할 때 운영자에게 매핑 테이블이 있다고 생각합니다. MSISDN이 카드에 저장되어있을 수 있습니다.
    +0

    답장을 보내 주셔서 감사합니다. @SzilardBarany. 나는 운영자가 IMSI를 MSISDN으로 변환하기위한 어떤 종류의 매핑 테이블을 가지고 있다는 것에 동의한다. –

    0

    MSISDN에는 BIGINT 유형이 있습니다. 그러므로 형식 변환을 미리 해두 고 like this

    +0

    $ msidn = $ result [ 'terms'] [ 'term'] [! msidn ']; –

    +0

    var_dump ($ msidn); –

    +0

    댓글을 추가하는 대신 질문을 수정하십시오. [편집에 대해 자세히 알아보기] (http://stackoverflow.com/help/editing) – buczek