我可以使用iOS上的地址簿框架從設備中檢索聯繫人的電話號碼。我怎樣才能分離或識別哪個國家代碼和哪個實際的電話號碼? 這可能嗎?從電話號碼確定國際電話代碼的算法
回答
我們無法從電話號碼識別國家代碼。
我做的是在維基百科上創建一個所有國家代碼的數組。然後,當我有電話號碼時,我會嘗試將前四位數字與其中一個國家代碼進行匹配。如果沒有匹配,請嘗試前三位數字等等。最終我找到了調用代碼。
國家代碼是一個相當混亂的話題,但足夠標準,一些程序員維護,你可以解決它。
您可以通過其初始子序列來識別國家代碼。執行以下操作的算法:
建立一個簡單的數據庫 - 甚至可以存儲爲平面文件並加載到字典中記憶 - 國家代碼。
從n = 1遞歸到3,檢查電話號碼的前n位是否與任何國家代碼匹配。如果是這樣,那是你的國家代碼。如果通過嘗試3失敗,這不是一個有效的國家代碼。
如果你喜歡處理準歧義。如果您看到國家代碼之間有重疊,例如如果你看到維爾京羣島的「1340」,這是因爲在某些可能不相干的意義上,它是美國國家代碼「1」的一個子集。國家代碼有時反映地緣政治情況,通常這是通過將國家代碼拆分爲下一個數字來表示的。 「1」將是官方的國家代碼,但您更感興趣的取決於您的申請。
注:這需要時像蘇聯解體發生認爲維護。
現在,事情變得混亂,當你要處理的事實,一些已經#分別對他們的國家代碼和一些不和等。我發現國家代碼也可以作爲領先地區代碼發現的唯一國家代碼是新加坡 - 我認爲它是+65-65...
。具有相當的準確性,您可以沿着以下方向使用業務邏輯:
- 請注意美國數字格式:(xxx)xxx-xxxx等。
- 使用這樣的事實,即只有特定的數字長度可以出現在給定的國家。如果你足夠努力的搜索,有關於此的文件。例如,所有的美國數字都是10的長度,日本的數字可以是9或10的長度。這可以給你增加的信息。
- 忽略大多數國家的領先0。意大利和象牙海岸是我發現的唯一兩個例外,它們可以有效的前導0。否則,它通常只是一個留在國內的本地電信公約。
一些研究之後,我發現這個LIB這似乎做的工作: https://github.com/iziz/libPhoneNumber-iOS
國際電話區號是很容易從電話號碼檢測。
您需要做的第一件事是將調用代碼解析爲樹中的每個數字代表分支。
然後,找到國家代碼就像遍歷樹一樣簡單,逐個數字,直到國家代碼匹配的最後一個分支。
在這一刻(2016年7月),最長的國家代碼有5位數,所以你的樹不應該有5級以上的分支。
- 1. 國際電話號碼
- 2. 電話號碼面膜 - 國際的
- 3. 將電話號碼轉換爲國際國家代碼iOS
- 4. 安卓:只爲國際電話號碼
- 5. 導軌:電話號碼 - 國際前綴
- 6. 國際電話號碼驗證與RegEx
- 7. 國際HTML鏈接到電話號碼
- 8. 格式化國際電話號碼
- 9. 國際電話號碼格式
- 10. 保存電話號碼+國家代碼
- 11. 貯藏電話號碼國家代碼
- 12. 從包含國家代碼的號碼獲取電話號碼
- 13. 從python的國家代碼中獲取電話號碼的國際前綴
- 14. 如何從給定的電話號碼獲得國家代碼
- 15. 國際電話號碼的jQuery插件:國旗和電話佔位符丟失
- 16. 具有國家代碼和國旗的角度國際電話號碼
- 17. 將國際電話號碼轉換爲本地號碼
- 18. 從電話號碼
- 19. 從電話號碼
- 20. 從電話號碼
- 21. 投票:Android中的電話號碼關於 - >電話身份和國際撥號代碼
- 22. 正常化給定國家代碼的電話號碼
- 23. 從電話號碼識別contry代碼
- 24. Django Form Field支持美國或國際電話號碼?
- 25. 電話號碼
- 26. 電話號碼
- 27. Javascript將電話號碼從E164轉換爲國際格式
- 28. 從文本中提取(國際)電話號碼
- 29. 獲取國際國家ISD電話代碼的最佳途徑
- 30. 從電話號碼查找國家代碼
這是錯誤的。我已經完成了。 – djechlin
如果我有數組或數據庫或其他東西,比較兩個號碼將工作,不管電話號碼或郵政編碼或別的什麼。如果你看到我的問題,我需要一個解決方案來找到它使用地址簿框架。沒有閱讀,你給我的答案-1評級........ – Satyam
那麼,聲明「我們不能從電話號碼識別國家代碼。」是錯誤的。 – djechlin