Comment diviser le numéro de mobile en code pays, indicatif régional et numéro local? par exemple +919567123456 après la séparation
code pays = 91
indicatif régional = 9567
numéro local = 123456
Il n'est pas possible d'analyser les numéros de téléphone avec un algorithme simple, vous devez utiliser des tableaux de données remplis avec les règles de chaque pays - car chaque pays délimite ses numéros de téléphone différemment.
Le code de pays est assez simple, utilisez simplement les données de l'article Codes d'appel de pays dans wikipedia et créez un tableau de tous les codes de pays uniques. Chaque pays a un préfixe unique, donc c'est facile.
Mais ensuite, vous devez rechercher les règles de chaque pays que vous souhaitez prendre en charge et extraire le (s) indicatif (s) régional (s) en utilisant les règles de chaque pays.
Ne maintenez pas votre propre tableau de toutes ces données! Utilisez la "bibliothèque Java International Phone Number Utilities v3.0", https://github.com/googlei18n/libphonenumber . C'est ce que Google utilise, et Google le maintient pour vous!
Comme mentionné par diverses personnes, vous ne pouvez pas faire cela avec une simple correspondance de chaîne. Les longueurs des indicatifs de pays ou de zone ne sont pas fixes.
Ayant fait cela dans le passé, nous avons maintenu un tableau de structure similaire à celui-ci: -
+ ------------ + --------- + ------- + ------------- - + | country_code | area_code | country | area | + ------------ + --------- + ----- - + -------------- + | 44 | 1634 | Royaume-Uni | Medway | | 44 | 20 | Royaume-Uni | Londres | | 964 | 23 | Iraq | Wasit (Al Kut) | | 964 | 2412 | Iraq | Unreal | + ------------ + --- ------ + ------- + -------------- +
Nous avons ensuite calculé la longueur maximale de area_code et country_code et vérifié la chaîne par sous-chaîne en commençant à la longueur maximale et en descendant jusqu'à ce que nous trouvions une correspondance.
Donc, étant donné le numéro 441634666788
Nous aurions commencé à la sous-chaîne [1,7] (7 étant la longueur de la plus longue combinaison de pays/indicatif régional), pas trouvé de correspondance, puis passé à [1,6] et trouvé la correspondance pour UK/Medway.
Pas très efficace mais cela a fonctionné.
MODIFIER
Vous pouvez également essayer quelque chose comme celui-ci, mais vous devrez le tester avec un ensemble de données complet ou peut-être même le décomposer en sélections distinctes de pays et d'indicatif régional, car il peut ne pas être très performant avec votre base de données choisie.
DECLARE @area_codes TABLE
(
country_code VARCHAR(10),
area_code VARCHAR(10),
country VARCHAR(20),
area VARCHAR(20),
match_string VARCHAR(MAX),
match_length INTEGER
)
INSERT INTO @area_codes VALUES ('44','1382','UK','Dundee', '441382%', 6)
INSERT INTO @area_codes VALUES ('44','1386','UK','Evesham', '441386%', 6)
INSERT INTO @area_codes VALUES ('44', '1', 'UK', 'Geographic numbers', '441%', 3)
DECLARE @number VARCHAR(MAX)
SET @number = '441386111111'
SELECT TOP 1 *
FROM @area_codes
WHERE @number LIKE match_string
ORDER BY match_length DESC
Vous maintiendrez les champs match_string et match_length via un déclencheur, en prenant soin de gérer les codes de zone nuls et d'indexer la table sur la colonne match_string.
Je pense que vous aurez besoin de quelque chose comme un dictionnaire d'indicatifs de pays et de régions. car leur stand peut avoir une longueur différente. USA +1, Allemagne +49, voire +6723. Idem avec les indicatifs régionaux.
La réponse dépend beaucoup du pays. Il n'y a pas de règle universelle disant "c'est l'indicatif du pays, c'est l'indicatif régional, c'est le numéro local". La seule information qui peut être obtenue universellement est le numéro du pays (et même qui peut contenir de 1 à 4 chiffres); alors vous devez consulter l'ensemble de règles du pays spécifique.
Pour exemples (comme, "il y a beaucoup de numéros de téléphone différents dans les pays donnés, mais ils suivent tous le même format = "):
Si vous vous efforcez de des données précises UK voir aussi http://code.google.com/p/ofcom-csverter/ pour une liste complète des indicatifs régionaux du Royaume-Uni avec des corrections.
Un problème très complexe. Vous devez d'abord déterminer le code du pays . Selon le code du pays, le reste doit être divisé en code régional et numéro local. Mais aucune des trois parties n'a une longueur fixe, ni le numéro de trou ni l'indicatif régional et la combinaison de pièces locales!
Exemple: 4930123456789
Exemple: 493328123456
Exemple: 34971123456