J'ai souvent vu cette question lorsque je travaillais pour une société de vérification d'adresses. Je publie la réponse ici pour la rendre plus accessible aux programmeurs qui se posent la même question. La société dans laquelle je travaillais traitait des milliards d'adresses, et nous avons beaucoup appris au cours de ce processus.
Tout d'abord, nous devons comprendre certaines choses sur les adresses.
Les adresses ne sont pas régulier
Cela signifie que les expressions régulières sont exclues. J'ai tout vu, des expressions régulières simples qui correspondent à des 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})(court|ct|street|st|drive|dr|lane|ln|road|rd|blvd)([ \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
... à este où un fichier de plus de 900 lignes génère à la volée une expression régulière supermassive pour correspondre à encore plus de choses. Je ne les recommande pas (par exemple, voici un bidouillage de la regex ci-dessus, qui fait beaucoup d'erreurs ). Il n'y a pas de formule magique facile pour que cela fonctionne. En théorie et par En théorie, il est impossible de faire correspondre des adresses avec une expression régulière.
Publication 28 de l'USPS documente les nombreux formats d'adresses possibles, avec tous leurs mots-clés et variations. Le pire, c'est que les adresses sont souvent ambiguës. Les mots peuvent avoir plusieurs sens ("St" peut être "Saint" ou "Street"), et il y a des mots dont je suis presque sûr qu'ils ont été inventés. (Qui savait que "Stravenue" était un suffixe de rue ?)
Il faudrait un code qui comprenne vraiment les adresses, et si ce code existe, c'est un secret commercial. Mais tu pourrais probablement faire ton propre code si tu es vraiment intéressé.
Les adresses ont des formes et des tailles inattendues
Voici quelques adresses inventées (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
Évidemment, ces éléments ne sont pas normalisés. La ponctuation et le saut de ligne ne sont pas garantis. Voici ce qui se passe :
-
Numéro 1 est complet car il contient une adresse postale, une ville et un état. Ces informations sont suffisantes pour identifier l'adresse, et celle-ci peut être considérée comme "livrable" (moyennant une certaine normalisation).
-
Numéro 2 est complet car il contient une adresse de rue (avec le numéro secondaire/unité) et un code ZIP à 5 chiffres, ce qui est suffisant pour identifier une adresse.
-
Numéro 3 est un format complet de boîte postale, car il contient un code postal.
-
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 ZIP unique est destiné aux espaces de livraison à fort volume ou concentrés. Tout ce qui est adressé au code ZIP 12345 est destiné à General Electric à Schenectady, NY. Cet exemple n'atteindra personne en particulier, mais l'USPS le livrera quand même.
-
Numéro 5 est également complet, croyez-le ou non. Avec ces seuls chiffres, l'adresse complète peut être découverte lorsqu'elle est analysée dans une base de données de toutes les adresses possibles. Il est facile de combler les lacunes en matière de direction, d'indicatif secondaire et de code ZIP+4 lorsque l'on considère chaque numéro comme un composant. Voici à quoi cela ressemble, entièrement développé et normalisé :
205 N 1105 W Apt 14
Beverly Hills CA 90210-5221
Les données d'adresse ne sont pas les vôtres
Dans la plupart des pays qui fournissent des données d'adresse officielles aux vendeurs agréés, les données d'adresse elles-mêmes appartiennent à l'agence qui les gère. Aux États-Unis, l'USPS est propriétaire des adresses. Il en va de même pour Postes Canada, Royal Mail et d'autres, bien que chaque pays applique ou définisse la propriété un peu différemment. Il est important de le savoir car cela interdit généralement la rétro-ingénierie de la base de données d'adresses. Vous devez faire attention à la manière dont vous acquérez, stockez et utilisez les données.
Google Maps est une solution courante pour trouver rapidement une adresse, mais la TOS est plutôt prohibitif ; par exemple, vous ne pouvez pas utiliser leurs données ou leurs API sans afficher une carte Google, et ce uniquement à des fins non commerciales (sauf si vous payez), et vous ne pouvez pas stocker les données (sauf pour une mise en cache temporaire). C'est logique. Les données de Google sont parmi les meilleures au monde. Cependant, Google Maps no vérifier l'adresse. Si une adresse n'existe pas, le système vous indiquera quand même où se trouve l'adresse. serait être si elle hizo existent (essayez dans votre propre rue ; utilisez un numéro de maison dont vous savez qu'il n'existe pas). Cette méthode est parfois utile, mais il faut en être conscient.
Nominatim's politique d'utilisation est également limité, en particulier pour les gros volumes et l'utilisation commerciale, et les données sont principalement tirées de sources gratuites, donc elles ne sont pas aussi bien maintenues (comme la nature des projets ouverts). Cependant, il peut encore répondre à vos besoins. Une grande communauté le soutient.
L'USPS lui-même dispose d'une API, mais il descend beaucoup et ne s'accompagne d'aucune garantie ni d'aucune assistance. Il peut également être difficile à utiliser. Certaines personnes l'utilisent avec parcimonie et sans problème. Mais il est facile d'oublier que l'USPS exige que vous utilisiez son API uniquement pour confirmer les adresses à expédier par son 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 existe des dizaines de bons articles d'UX sur Internet à ce sujet. Il n'en reste pas moins que si vous disposez d'un formulaire d'adresse avec des champs individuels, c'est ce que les utilisateurs attendent, même si cela complique les choses pour les adresses marginales qui ne correspondent pas au format attendu par le formulaire, ou si le formulaire exige un champ qu'il ne devrait pas. Ou encore, les utilisateurs ne savent pas où placer une certaine partie de leur adresse.
Je pourrais continuer à parler de la mauvaise ergonomie des formulaires de paiement de nos jours, mais je dirai plutôt que le fait de regrouper les adresses dans un seul champ sera un atout pour l'avenir. bienvenue à changement : les gens pourront taper leur adresse comme ils l'entendent, plutôt que d'essayer de comprendre votre long formulaire. Cependant, ce changement sera inattendu et les utilisateurs peuvent trouver cela un peu déroutant au début. Il faut en être conscient.
Une partie de cette douleur peut être atténuée en plaçant le champ de pays au début, avant l'adresse. Lorsqu'ils remplissent d'abord le champ "pays", vous savez comment faire apparaître votre formulaire. Vous avez peut-être un bon moyen de traiter les adresses américaines à champ unique. Ainsi, s'ils sélectionnent les États-Unis, vous pouvez réduire votre formulaire à un seul champ, sinon vous affichez les champs des composants. Autant de choses auxquelles il faut réfléchir !
Maintenant que nous savons pourquoi c'est difficile, que pouvez-vous faire ?
L'USPS accorde des licences aux vendeurs par le biais d'un processus appelé certification CASS™ pour fournir des adresses vérifiées aux clients. Ces fournisseurs ont accès à la base de données de l'USPS, mise à jour mensuellement. Leurs logiciels doivent se conformer à des normes rigoureuses pour être certifiés, et ils n'exigent pas souvent l'acceptation de conditions restrictives telles que celles mentionnées ci-dessus.
De nombreuses entreprises certifiées CASS peuvent traiter des listes ou disposent d'API : Melissa Data, Experian QAS, et SmartyStreets, pour n'en citer que quelques-unes.
(En raison des critiques que j'ai reçues pour "publicité", j'ai tronqué ma réponse à ce stade. C'est à vous de trouver une solution qui vous convient).
La vérité : Vraiment, les amis, je ne travaille dans aucune de ces entreprises. Ce n'est pas une publicité.
0 votes
Les réponses ci-dessous sont plus utiles car elles ne ignorent pas le problème global - que les adresses ne suivent pas un schéma commun.