Base de données pays - quel pays pour quel appel ?

Bonjour,

Je rencontre une difficulté en php + sql. J’ai 2 bases de données. La première est une bdd qui enregistre les appels émis depuis le système de téléphonie de ma boîte. elle se présente comme suit :
date numero

exemple :
2007-03-07 10:26:58 8411 0023321300725
2007-03-07 10:12:50 8411 002236342315
2007-03-07 09:49:56 8411 33232815300
2007-03-07 09:52:41 8411 33232815300

J’ai une deuxième bdd qui contient la liste des code de pays et leur correspondance :
code pays

exemple :
33 France
6998 Midway Islands
8701 Inmarsat Single Network Access Code
8711 Inmarsat Atlantic Ocean-East

Mon problème est le suivant. Comment définir le pays par rapport à un appel passé ? En sachant que pour la France, le numéro composé peut très bien être du type 01xxxx ou 331 ou 06 ou 336 ?
Par contre tout les appels commencant par 00 sont des appels internationnaux.

J’essai en vain de faire mon code sans grand succès.

Merci d’avance pour votre aide.

plusieurs cas:

Pour la france

  • Soit numéro de 10 chiffres commencant par 0
  • Soit numéro de 11 chiffres commencant par 33
    Pour étranger (numéro commencant par 00)
  • Extraction du code pays (jusqu’a 4 chiffres)
  • Le reste de la chaîne est le numéro
    Pour identifier le pays, il faut extraire un chiffre, vérifier si ce chiffre correspond à un pays sinon extraire un 2eme chiffre, vérifier si correspondance… etc

Il y a cependant une exception avec les etats unis et le canada, en effet leur indicatif est le 1 mais il ne faut pas s’arreter là (les 3 chiffres suivants identifient la region)

bref probleme complexe :slight_smile:

Il y a beaucoup de pays qui ont un indicatif régional, mais après tout on peut considérer que ces indicatifs font partie du numéro non? A moins qu’il y ait besoin d’identifier la région.

Ben en fait ce n’est aps possible de vérifier chiffre par chiffre pcq si on prend le cas du canada/usa 1) et les Bahamas (1242), je risque de retrouver avec un Bahamas sur un numéro canadien :s

pas top non ?!

Pour simplifier les N° français, éventuellement tu les traduits tous en formes "internationale":
http://en.wikipedia.org/wiki/List_of_inter…l_call_prefixes
donc 0123456789 ou 33123456789 deviennent tous les deux "+33123456789" (+ pour indiquer international)

Pour les N° américains c’est vraiment un cas particulier (je le découvre en même temps que vous)
tu as l’arbre d’analyse des N° internationaux ici, et on voit que les américans sont à parts:
http://en.wikipedia.org/wiki/List_of_country_calling_codes

il faut que tu teste bien les 4 premiers chiffres et voir s’il font partie de la liste des états américains, canadiens, ou autres (avec en plus des cas particiuler comme le 1900), ce pour regrouper par pays, sans tenir comptes de la province ou l’état (sauf si ça t’intéresse) :wink:

oui mais je ne peux qu’exploiter une bdd deja renseignée automatiquement à chaque fin d’appel. Le format d’enregistrement n’est pas modifiables à mon niveau. Je sens que je suis mal parti pour réussir ce projet alors :s

Non aucun numéro aux USA/Canada ne peut commencer par 242 XXX XXX car c’est l’indicatif des bahamas

Tu n’es pas obligé de transformer tes N° en base, c’est juste pour une comparaison du préfixe :wink:
et tu peux te stocker dans un petit fichier une liste de correspondance préfixe-pays qui commence par les pays les plus long, comme ça tu compare bien 1242 avant 1.

exemple dans un fichier de param:


350 gribraltar
33 france
…etc…
1242 bahamas
1403 canada
1250 canada
1206 canada

1 usa

(donc tu précise plusieurs lignes pour le canada et éventuellement les us, sauf si tu prend tous les N° restants sur les USA)
en utilisant cette liste pour le canada et les US:
http://en.wikipedia.org/wiki/List_of_North…ican_area_codes