終于可以攜號轉網(wǎng),三大運營商做了10年,技術難點到底在哪?
2019年11月11日,工業(yè)和信息化部發(fā)布了《攜號轉網(wǎng)服務管理規(guī)定》,標志著我國攜號轉網(wǎng)業(yè)務可以正式使用了。
規(guī)定中要求4大運營商嚴格遵照執(zhí)行,包括:不得無正當理由拒絕、阻止、拖延向用戶提供攜號轉網(wǎng)服務、不得在用戶提出攜號轉網(wǎng)申請后,干擾用戶自由選擇等行為。
四大運營商:中國電信、中國移動、中國聯(lián)通、中國廣電公司。
緊接著,在11月14日,幾大運營商發(fā)布了攜號轉網(wǎng)細則,并表示攜號轉網(wǎng)全面進入試運行階段。
攜號轉網(wǎng)條件查詢:
編輯短信“CXXZ#姓名#證件號碼”發(fā)送至10086/10010/10001。
但是,在試運行的這幾天,有很多用戶吐槽攜號轉網(wǎng),困難重重。
部分運營商表示,攜號轉網(wǎng)初期與用戶期望可能存在一定差距。

其實,攜號轉網(wǎng)業(yè)務在很多國家和地區(qū)很早就可以進行了,而且國內(nèi)最早也在2010年就在天津、海南啟動試點了,那么到底是為什么這么久才能面向全國開放呢呢?
三大運營商之前一直說是"技術"原因導致進度緩慢,那么,這個業(yè)務的技術難度到底有多大呢?
攜號轉網(wǎng),攜的是什么?
攜號轉網(wǎng),官方叫法是號碼攜帶(NP,Number Portability),對于普通用戶來說很容易理解,就是我有一個中國聯(lián)通的186XXXXXXXX的手機號,通過攜號轉網(wǎng)業(yè)務,把他轉成一個中國電信的186XXXXXXXX的手機號,這個過程只換了運營商,并沒有換號碼。
對于用戶來說,我們只關心這個186的號碼,這個號碼在移動通信系統(tǒng)中叫做MDN(Mobile Directory Number,移動用戶號碼簿號碼)或者MSISDN(Mobile Station International Subscriber Directory Number,移動臺國際用戶目錄號)
MDN是CDMA協(xié)議中的移動用戶號碼,MSISDN是GSM/UMTS協(xié)議中的移動用戶號碼。
MDN(MSISDN)采取E.164編碼方式。MDN號碼的結構如下:MDN =CC + MAC + SN。

其中:
CC(Country Code,國家碼)
用戶所屬國家代號,由2位數(shù)字組成,中國為86
MAC(Mobile Access Code,移動接入碼)
識別移動用戶所歸屬的移動通信網(wǎng)。由3位數(shù)字組成。如186,139等。
SN(Subscriber Number,用戶號碼)
SN長度為8位,編碼格式為H0H1H2H3ABCD。由運營商統(tǒng)一分配。
這就組成了一個中國的手機號:8618612345678,那么在攜號轉網(wǎng)業(yè)務中,這個號碼是不發(fā)生改變的。
那么,有沒有人想過,既然攜號轉網(wǎng)的時候手機號是不變,為什么還需要重新?lián)Q一張新卡呢?
這就要引出第二個號碼,叫做IMSI(International Mobile Subscriber Identity,國際移動用戶識別碼) ,這個號碼可以用來唯一識別一個用戶的號碼。
IMSI共有15位,其結構如下:IMSI = MCC + MNC + MSIN

其中:
MCC(Mobile Country Code,移動國家碼)
由國際電聯(lián)統(tǒng)一分配和管理,唯一識別移動用戶所屬的國家,共3位,中國為460;
MNC(Mobile Network Code,移動網(wǎng)絡碼)
共2位,中國移動TD系統(tǒng)使用00,中國聯(lián)通GSM系統(tǒng)使用01,中國移動GSM系統(tǒng)使用02,中國電信CDMA系統(tǒng)使用03
MSIN(Mobile Subscriber Identification Number ,移動客戶識別號)
唯一識別碼共有10位。
有了IMSI,想要區(qū)分一張卡到底是移動還是聯(lián)通的,只需取得其中的MNC字段即可。00就是移動,01、02就是聯(lián)通,03就是電信。
通過一個典型IMSI號碼,如:460000123456789,我們可以分析得知,這是一個中國聯(lián)通用戶的手機卡。因為他的前五位是:46000 。

但是,IMSI這個號碼普通用戶是不感知的,具體有什么用,我們后面介紹移動通信的呼叫流程的時候會再次提到這個號碼。

介紹完了MDN和IMSI,我們知道了,攜號轉網(wǎng)其實攜帶的是MDN,但是IMSI是需要改變的。
移動通信呼叫流程
接下來,我們看一下,在沒有攜號轉網(wǎng)業(yè)務的時候,一次普通的撥打電話會發(fā)生什么事情。

1、用戶手機開機的時候,移動手機會向歸屬位置寄存器HLR發(fā)送"位置更新請求",并把手機卡上面的IMSI和MDN注冊到HLR中,IMSI作為主鍵。
2、用戶撥打電話,需要把手機卡的IMSI以及被叫用戶的MDN上報給移動交換中心MSC,MSC會把請求發(fā)送給HLR,查詢主叫用戶的MDN用戶簽約信息,以及被叫用戶的位置信息及運營商信息
3、移動交換中心MSC將呼叫路由至關口局GMSC
4、用戶A所屬的GMSC-1建立到用戶B所屬的GMSC-2的連接。
5、手機用戶B所屬的GMSC-2從VLR中查詢用戶B所在的位置區(qū)碼。
6、MSC-2根據(jù)手機用戶B的IMSI,從VLR中查詢用戶B對應的位置區(qū)碼LAC和TMSI。
7、MSC-2通過TMSI號呼叫手機B
這里面比較重要的一步就是通過HLR進行號碼分析。HLR之所以可以進行號碼分析,是因為HLR存儲了HLR存儲移動電話運營商所發(fā)行的每個SIM卡的詳細信息。包括我們前面提到過的兩個關鍵號碼:IMSI和MDN(MSISDN)
因為我們撥打電話的時候,傳遞給HLR的信息中包括:主叫用戶的IMSI、主叫用戶的MDN以及被叫用戶的MDN。
在有攜號轉網(wǎng)業(yè)務之前,HLR想要知道被叫用戶屬于哪個運營商,只能通過被叫用戶的MDN進行分析,比如139的用戶就是移動的。

但是有了攜號轉網(wǎng)之后,這種分析方式就不可靠了。
號碼攜帶集中數(shù)據(jù)庫
既然我們沒辦法通過被叫號碼的MDN直接通過號段分析一個手機號屬于哪個運營商了,就要想一個新的辦法來進行判斷。
這時候就有一種方案被提出來了:采用了一種集中數(shù)據(jù)庫的方式。
即在號碼攜帶業(yè)務網(wǎng)絡中設置一個集中的數(shù)據(jù)庫,也稱為集中業(yè)務管理系統(tǒng)(CSMS:Central Service Management System),運營商的號碼攜帶業(yè)務節(jié)點通過此集中數(shù)據(jù)庫系統(tǒng)進行通信,實現(xiàn)號碼攜帶的業(yè)務協(xié)商及攜號轉網(wǎng)(NP)數(shù)據(jù)下發(fā)。
說白了,就是把所有辦理過攜號轉網(wǎng)業(yè)務的手機號信息,保存在一個單獨的數(shù)據(jù)庫中,這樣在HLR查詢被叫號碼所屬運營商的時候,去這個數(shù)據(jù)庫中查詢下就知道其當前運營商了。

本地業(yè)務管理系統(tǒng)(LSMS)保存本地的號碼攜帶數(shù)據(jù),并負責管理運營商內(nèi)部的網(wǎng)元設備;
業(yè)務受理系統(tǒng)(SOA)主要負責受理和處理用戶提出的號碼攜帶申請;
集中業(yè)務管理系統(tǒng)(CSMS)處理所有SOA之問的交互信息,并負責向LSMS同步號碼攜帶數(shù)據(jù)。
下圖是一個中國聯(lián)通186用戶呼叫另外一個186(可能做過攜號轉網(wǎng))用戶的流程圖:

在呼叫過程中,中國聯(lián)通網(wǎng)絡會嘗試進行攜號轉網(wǎng)(NP)查詢,即查詢CSMS,判斷被叫號碼是否做過攜號轉網(wǎng)。有以下3種情況:
未攜轉:正常呼叫流程,由中國聯(lián)通核心網(wǎng)將呼叫疏通至相應端局。
攜轉至中國電信:由中國聯(lián)通核心網(wǎng)將呼叫疏通至中國聯(lián)通關口局GMSC,關口局將相應呼叫轉接至中國電信語音網(wǎng)絡。
攜轉至中國移動:由中國聯(lián)通核心網(wǎng)將呼叫疏通至中國聯(lián)通關口局GMSC,關口局將相應呼叫轉接至中國移動語音網(wǎng)絡。
攜號轉網(wǎng)后短信怎么辦?
前面我們介紹過了攜號轉網(wǎng)的技術方案中,語音呼叫的過程及解決方案,那么短信是如何實現(xiàn)的呢?
用戶現(xiàn)在手機上接收的短信主要有兩種,第一種是用戶之間發(fā)送的,第二種是平臺給用戶發(fā)送的,如驗證碼。
對于第一種用戶之間發(fā)送的短信,也是通過發(fā)送端運營商發(fā)送給接收端運營商的,具體運營商的查找規(guī)則和電話呼叫類似,也是可以借助號碼攜帶集中數(shù)據(jù)庫的。這種比較容易理解。
但是,平臺發(fā)送給用戶的驗證碼類型的短信,就不是這樣的了,這種驗證碼一般發(fā)送流程是:

1、用戶在網(wǎng)站上填寫手機號,點擊發(fā)送驗證碼
2、驗證碼平臺通過一系列規(guī)則,判斷號碼所屬運營商,生成驗證碼之后,將短信提交到運營商的服務器。
3、運營商接到短信后,將短信下發(fā)到用戶的手機。
可以看到,這個過程是驗證碼平臺自己判斷的運營商,我們知道,有了攜號轉網(wǎng)之后,這種驗證方法已經(jīng)不準確了。
所以在攜號轉網(wǎng)早期試運行的時候,很多用戶發(fā)現(xiàn)有收不到短信驗證碼的情況。還有一種情況就是利用第三方充值平臺充值,也和這個原理類似。
那么為了解決這個問題,2014年,工信部已要求基礎電信企業(yè)對驗證碼類的非自營非定制類短信開放網(wǎng)間轉發(fā),其他行業(yè)的驗證碼平臺仍可將驗證碼發(fā)送給用戶原來簽約的基礎電信企業(yè),由其通過網(wǎng)間轉發(fā)的方式發(fā)給用戶新簽約的基礎電信企業(yè),“短信驗證碼”問題已經(jīng)基本解決。

目前,工信部已經(jīng)建立“攜號轉網(wǎng)”數(shù)據(jù)庫并向第三方服務提供商開放,包括充值平臺在內(nèi)的第三方服務提供商,可直接從數(shù)據(jù)庫同步“攜號轉網(wǎng)”數(shù)據(jù),獲取用戶最新簽約的基礎電信企業(yè),為用戶提供驗證碼發(fā)送和充值等相關服務。
部分用戶規(guī)模較大的第三方充值平臺,如微信、支付寶等均已可正常為“攜號轉網(wǎng)”用戶充值。
為解決攜號轉網(wǎng)工作種的這些困擾,信通院還專門成立了產(chǎn)業(yè)組織“碼號服務推進組”,其中的成員單位就有很多互聯(lián)網(wǎng)公司及銀行系統(tǒng)。

攜號轉網(wǎng)對開發(fā)者的影響
在沒有攜號轉網(wǎng)業(yè)務的時候,我們可以通過手機號碼的號段判斷一個用戶屬于哪個運營商,但是有了攜號轉網(wǎng)業(yè)務之后,這樣做就不夠準確了,這其實對于一些網(wǎng)站的開發(fā)者是有影響的。
比如GitHub上有3.7k Star的ChinaMobilePhoneNumberRegex組件中,就是通過號段判斷號碼所屬運營商的:
中國移動號碼判斷的正則表達式:
^(?:\+?86)?1(?:3(?:4[^9\D]|[5-9]\d)|5[^3-6\D]\d|8[23478]\d|(?:78|98)\d)\d{7}$
中國聯(lián)通號碼判斷的正則表達式:
^(?:\+?86)?1(?:3[0-2]|[578][56]|66)\d{8}$
中國電信號碼判斷的正則表達式:
^(?:\+?86)?1(?:3(?:3\d|49)\d|53\d{2}|8[019]\d{2}|7(?:[37]\d{2}|40[0-5])|9[19]\d{2})\d{6}$
在有了攜號轉網(wǎng)業(yè)務以后,這個正則表達式就不奏效了。或者說,以后在再也沒辦法通過正則表達式驗證號碼所屬運營商了。
所以,如果代碼中有任何根據(jù)號段判斷運營商的邏輯,那么這段代碼的有效性會越來越低。
期待有一天,號碼攜帶集中數(shù)據(jù)庫可以開放查詢接口,供第三方查詢號碼的歸屬運營商。
總結
本文簡單介紹了我國攜號轉網(wǎng)業(yè)務的背后實現(xiàn)細節(jié),但是由于作者并非通信專業(yè)出身,文中內(nèi)容參考了很多文獻資料,如有偏頗,歡迎指正。
懂了這么多知識,我還是沒辦法順利的攜號轉網(wǎng)!
參考資料:
《移動網(wǎng)間號碼攜帶集中數(shù)據(jù)庫系統(tǒng)接口協(xié)議設計》 《我國號碼攜帶業(yè)務訪問數(shù)據(jù)庫技術方案的研究》 《移動通信基本呼叫流程》 《中國電信CDMA基本呼叫流程》 https://zhuanlan.zhihu.com/p/22072434
https://kknews.cc/zh-sg/news/xl4xjmo.html
https://wwww.huxiu.com/article/327106.html
http://www.opene164.org.cn/Num_Sys/other/introduce/member.html
關于作者:漫話編程,是一個通過漫畫+音頻的形式講解枯燥的編程知識的公眾號。致力于讓編程變得更有樂趣。