J'ai beaucoup vu cette question lorsque je travaillais pour une entreprise de vérification d'adresse. Je poste la réponse ici pour la rendre plus accessible aux programmeurs qui recherchent avec la même question. L'entreprise dans laquelle je travaillais a traité des milliards d'adresses et nous avons beaucoup appris au cours du processus.
Tout d'abord, nous devons comprendre quelques éléments concernant les adresses.
Les adresses ne sont pas régulières
Cela signifie que les expressions régulières sont supprimées. J'ai tout vu, des simples expressions régulières qui correspondent aux adresses dans un format très spécifique, à ceci:
/ \ s + (\ d {2,5} \ s +) (?! [a | p] m \ b) (([a-zA-Z | \ s +] {1,5}) {1,2}) ? ([\ s |, |.] +)? (([a-zA-Z | \ s +] {1,30}) {1,4}) (cour | ct | rue | st | lecteur | dr | voie | ln | route | rd | boulevard) ([\ s |, |. |;] +)? (([a-zA-Z | \ s +] {1,30}) {1,2}) ([ \ s |, |.] +)? \ b (AK | AL | AR | AZ | CA | CO | CT | DC | DE | FL | GA | GU | HI | IA | ID | IL | IN | KS | KY | LA | MA | MD | ME | MI | MN | MO | MS | MT | NC | ND | NE | NH | NJ | NM | NV | NY | OH | OK | OR | PA | RI | SC | SD | TN | TX | UT | VA | VI | VT | WA | WI | WV | WY) ([\ s |, |.] +)? (\ S + \ d {5})? ([\ S |, |.] +) / i
... à ceci où un fichier de classe de ligne de plus de 900 lignes génère une expression régulière supermassive à la volée pour correspondre encore plus. Je ne les recommande pas (par exemple, voici un violon de l'expression régulière ci-dessus, qui fait beaucoup d'erreurs ). Il n'y a pas de formule magique facile pour que cela fonctionne. En théorie et en théorie, il n'est pas possible de faire correspondre des adresses avec une expression régulière.
La publication USPS 28 documente les nombreux formats d'adresses possibles, avec tous leurs mots-clés et variatons. Pire encore, les adresses sont souvent ambiguës. Les mots peuvent signifier plus d'une chose ("St" peut être "Saint" ou "Street") et il y a des mots que je suis sûr qu'ils ont inventés. (Qui savait que "Stravenue" était un suffixe de rue?)
Vous auriez besoin d'un code qui comprend vraiment les adresses, et si ce code existe, c'est un secret commercial. Mais vous pourriez probablement rouler vous-même si vous aimez vraiment ça.
Les adresses se présentent sous des formes et des tailles inattendues
Voici quelques adresses artificielles (mais complètes):
1) 102 main street
Anytown, state
2) 400n 600e #2, 52173
3) p.o. #104 60203
Même ceux-ci sont peut-être valables:
4) 829 LKSDFJlkjsdflkjsdljf Bkpw 12345
5) 205 1105 14 90210
De toute évidence, ceux-ci ne sont pas normalisés. Ponctuation et sauts de ligne non garantis. Voici ce qui se passe:
Le numéro 1 est complet car il contient une adresse postale et une ville et un état. Avec cette information, il y a assez d'identifier l'adresse, et elle peut être considérée comme "livrable" (avec une certaine normalisation).
Le numéro 2 est complet car il contient également une adresse postale (avec numéro secondaire / d'unité) et un code postal à 5 chiffres, ce qui suffit pour identifier une adresse.
Le numéro 3 est un format de boîte postale complet, car il contient un code postal.
Le numéro 4 est également complet car le code postal est unique , ce qui signifie qu'une entité ou une société privée a acheté cet espace d'adressage. Un code postal unique est destiné aux espaces de livraison à volume élevé ou concentrés. Tout ce qui est adressé au code postal 12345 va à General Electric à Schenectady, NY. Cet exemple n'atteindra personne en particulier, mais l'USPS serait toujours en mesure de le fournir.
Le numéro 5 est également complet, croyez-le ou non. Avec juste ces nombres, l'adresse complète peut être découverte lorsqu'elle est analysée par rapport à une base de données de toutes les adresses possibles. Remplir les directives manquantes, l'indicateur secondaire et le code ZIP + 4 est trivial lorsque vous voyez chaque nombre comme un composant. Voici à quoi il ressemble, entièrement développé et standardisé:
205 N 1105 W Apt 14
Beverly Hills CA 90210-5221
Les données d'adresse ne vous appartiennent pas
Dans la plupart des pays qui fournissent des données d'adresse officielles aux fournisseurs agréés, les données d'adresse elles-mêmes appartiennent à l'agence gouvernementale. Aux États-Unis, l'USPS possède les adresses. Il en va de même pour Postes Canada, Royal Mail et d'autres, bien que chaque pays applique ou définit la propriété un peu différemment. Le savoir est important, car il interdit généralement la rétro-ingénierie de la base de données d'adresses. Vous devez faire attention à l'acquisition, au stockage et à l'utilisation des données.
Google Maps est une solution courante pour les corrections d'adresse rapides, mais le TOS est plutôt prohibitif; par exemple, vous ne pouvez pas utiliser leurs données ou API sans afficher une carte Google Map, et à des fins non commerciales uniquement (sauf si vous payez), et vous ne pouvez pas stocker les données (sauf pour la mise en cache temporaire). Logique. Les données de Google sont parmi les meilleures au monde. Cependant, Google Maps ne vérifie pas l'adresse. Si une adresse n'existe pas, il sera toujours vous montrer où l'adresse serait être si elle a fait exist (essayer sur votre propre rue, utiliser un numéro de la maison que vous savez n'existe pas). Ceci est parfois utile, mais soyez conscient de cela.
La politique d'utilisation de Nominatim est également limitative, en particulier pour un volume élevé et une utilisation commerciale, et les données sont principalement tirées de sources gratuites, donc elles ne sont pas aussi bien entretenues (telle est la nature des projets ouverts) - cependant, cela peut toujours convenir. vos besoins. Il est soutenu par une grande communauté.
L'USPS lui-même a une API, mais il descend beaucoup et n'est livré sans aucune garantie ni support. Il peut également être difficile à utiliser. Certaines personnes l'utilisent avec parcimonie et sans problème. Mais il est facile de rater que l'USPS exige que vous utilisiez son API uniquement pour confirmer les adresses à expédier par leur intermédiaire.
Les gens s'attendent à ce que les adresses soient difficiles
Malheureusement, nous avons conditionné notre société à s'attendre à ce que les adresses soient compliquées. Il y a des dizaines de bons articles UX partout sur Internet à ce sujet, mais le fait est que si vous avez un formulaire d'adresse avec des champs individuels, c'est ce à quoi les utilisateurs s'attendent, même si cela complique la tâche pour les adresses marginales qui ne correspondent pas au formatez le formulaire attendu, ou peut-être que le formulaire nécessite un champ qu'il ne devrait pas. Ou les utilisateurs ne savent pas où mettre une certaine partie de leur adresse.
Je pourrais continuer encore et encore sur le mauvais UX des formulaires de paiement ces jours-ci, mais je dirai simplement que combiner les adresses dans un seul champ sera un changement bienvenu - les gens pourront taper leur adresse comme ils l'entendent , plutôt que d'essayer de comprendre votre longue forme. Cependant, ce changement sera inattendu et les utilisateurs peuvent le trouver un peu discordant au début. Soyez conscient de cela.
Une partie de cette douleur peut être atténuée en plaçant le champ du pays au premier plan, avant l'adresse. Lorsqu'ils remplissent d'abord le champ du pays, vous savez comment faire apparaître votre formulaire. Peut-être avez-vous un bon moyen de gérer les adresses américaines à un seul champ, donc s'ils sélectionnent États-Unis, vous pouvez réduire votre formulaire à un seul champ, sinon afficher les champs du composant. Juste des choses à penser!
Maintenant, nous savons pourquoi c'est difficile; Que peux-tu y faire?
L'USPS octroie des licences aux fournisseurs via un processus appelé Certification CASS ™ pour fournir des adresses vérifiées aux clients. Ces fournisseurs ont accès à la base de données USPS, mise à jour mensuellement. Leur logiciel doit se conformer à des normes rigoureuses pour être certifié, et ils n'ont pas souvent besoin d'accepter les conditions limitatives décrites ci-dessus.
Il existe de nombreuses entreprises certifiées CASS qui peuvent traiter des listes ou avoir des API: Melissa Data, Experian QAS et SmartyStreets pour n'en nommer que quelques-unes.
(En raison de la critique pour la "publicité", j'ai tronqué ma réponse à ce stade. C'est à vous de trouver une solution qui fonctionne pour vous.)
La vérité: Vraiment, mes amis, je ne travaille dans aucune de ces entreprises. Ce n'est pas une publicité.