---
title: "Normalizarea adreselor de livrare în mai multe țări: coduri poștale, chirilică, limite de lungime"
description: "Normalizarea adresei transformă ce a scris clientul în forma pe care o acceptă curierul și o confirmă un nomenclator național. O facem pe fiecare țară în parte: aflăm întâi dacă acolo codul poștal descrie o stradă sau o localitate întreagă, validăm pe un nomenclator ale cărui defecte le știm, normalizăm nomenclatorul și căutarea cu aceeași funcție și îi trimitem curierului scrierea și identificatorii lui. Cele mai multe eșecuri au venit din instalația din jurul adresei, nu din adresă."
date: 2026-10-11
lang: ro
canonical: https://goingstellar.ro/ro/metode/normalizarea-adreselor-de-livrare-internationale/
author: Going Stellar
publisher: GOING STELLAR S.R.L.
topic: E-commerce / Adrese
license: CC BY 4.0
alternate_en: https://goingstellar.ro/methods/normalising-international-delivery-addresses/
---

# Normalizarea adreselor de livrare în mai multe țări: coduri poștale, chirilică, limite de lungime

*Normalizarea adresei transformă ce a scris clientul în forma pe care o acceptă curierul și o confirmă un nomenclator național. O facem pe fiecare țară în parte: aflăm întâi dacă acolo codul poștal descrie o stradă sau o localitate întreagă, validăm pe un nomenclator ale cărui defecte le știm, normalizăm nomenclatorul și căutarea cu aceeași funcție și îi trimitem curierului scrierea și identificatorii lui. Cele mai multe eșecuri au venit din instalația din jurul adresei, nu din adresă.*

> E-commerce · Adrese · 2026-10-11 · https://goingstellar.ro/ro/metode/normalizarea-adreselor-de-livrare-internationale/

## Pe scurt

- Înainte de a construi un validator de adrese pentru o țară nouă, stabilește dacă acolo codul poștal identifică o stradă sau o localitate întreagă; România și Polonia sunt la nivel de stradă, Cehia și Bulgaria la nivel de localitate.
- O căutare normalizată altfel decât nomenclatorul răspunde „n-am găsit”, care arată identic cu „nu există”; dovedește că și căutarea și coloana stocată folosesc aceeași funcție de normalizare.
- Nu descompune chirilica atunci când scoți diacriticele și ține minte că litere ca ł, ø și ß n-au deloc formă descompusă.
- Trimite-i curierului numele localității și identificatorul din nomenclatorul lui; transliterarea ta e doar un indiciu.
- Limitele de câmp ale curierului refuză etichete întregi: taie câmpul de stradă la limită și trimite adresa completă, așa cum a lipit-o clientul, în nota curierului.

## Ce înseamnă normalizarea adresei, pe scurt

Normalizarea adresei este pasul care transformă textul liber scris de client la checkout în câmpuri pe care curierul le acceptă și pe care un nomenclator oficial sau deschis le confirmă. Pentru comenzi livrate în mai multe țări, adresele se normalizează pe țară: stabilești dacă acolo codul poștal e la nivel de stradă sau de localitate, validezi pe un nomenclator național, compari textul cu o singură funcție de normalizare, îi trimiți curierului exact numele și identificatorul din lista lui și respecți limitele câmpurilor. Un câmp se repară automat doar când două semnale independente spun același lucru; altfel decide un om.

Prin **nomenclator** înțelegem aici un tabel cu localitățile, străzile și codurile poștale valide ale unei țări. O **valoare-santinelă** e un marcaj pe care o sursă de date îl folosește pentru „necompletat”. Regula celor două semnale și codul-santinelă care era să plece pe o etichetă sunt descrise în articolul nostru de cercetare despre repararea adreselor; metoda de aici este instalația de dedesubt.

## Pasul 1: află ce înseamnă codul poștal în fiecare țară

Prima întrebare pentru orice țară este dacă acolo codul poștal identifică o stradă sau o localitate întreagă. Răspunsul schimbă modelul de date, iar un validator copiat dintr-o țară în alta fără întrebarea asta e greșit din start.

În România codul poștal e la nivel de stradă, cu intervale de numere și paritate. Cehia e invers: în 74% dintre comune există un singur cod, iar țara are doar 2.677 de coduri poștale, față de 37.914 în România, deci derivi codul din localitate, nu strada din cod. Polonia e la nivel de stradă, ca România: o arteră principală din capitală are peste 20 de coduri, feliate pe număr și paritate. Bulgaria are coduri de 4 cifre la nivel de localitate, în jur de 4.600. În Moldova codul urmează numărul casei: o stradă din capitală are trei coduri pentru trei intervale de numere, deci orice regulă care judecă după numele străzii greșește pe două treimi din ea.

De aceea validatorul polonez e un port al celui românesc, iar cel ceh a trebuit scris altfel. Decidem asta înainte de orice linie de cod pentru o țară nouă.

## Pasul 2: alege nomenclatorul și află-i întâi defectele

Fiecare nomenclator național pe care l-am folosit avea un defect care ar fi stricat o construcție naivă. Acum căutăm defectul înainte să încărcăm datele.

Pentru Cehia, registrul oficial de adrese se publică lunar, ca CSV, sub licența CC BY 4.0, cu străzi, numere de casă și coduri poștale. Pentru Polonia am folosit OpenAddresses, derivat din registrul oficial, dar codurile poștale din el sunt pe alocuri greșite sistematic, fiindcă sunt atribuite prin suprapunere spațială, nu după rutarea poștală. Lista autoritativă stradă–cod e un produs plătit al poștei naționale. Am ales întâi varianta gratuită: validăm strada și numărul pe datele deschise și **păstrăm codul clientului** când strada și localitatea există, fiindcă de obicei clientul își știe codul.

Bulgaria nu are un registru oficial de străzi pe care să-l putem folosi; lista oficială de localități nu conține străzi. Singura sursă de străzi a fost OpenStreetMap, iar extrasele gata făcute în format shapefile nu aveau deloc etichetele de adresă, așa că am parsat extrasul complet. OpenStreetMap avea doar 1.209 din cele aproximativ 4.600 de coduri poștale bulgărești; fișierul gratuit de coduri GeoNames a dus numărul la 4.679. Pentru Ungaria și Slovacia am combinat codurile GeoNames cu străzile din OpenStreetMap. Pentru Moldova, poșta națională are un API public cu 706.242 de numere de casă, fiecare cu un singur cod.

## Pasul 3: normalizează nomenclatorul și căutarea cu aceeași funcție

O căutare care normalizează textul altfel decât a fost normalizat nomenclatorul răspunde mereu „n-am găsit”, iar „n-am găsit” arată exact ca „nu există”. A fost cea mai scumpă familie de eșecuri tăcute pe care am avut-o.

Funcția noastră de pliere descompunea orice caracter și arunca semnele combinate. Pe chirilică asta distruge: „й” se descompune în „и” plus căciulă, deci 303 din 6.195 de localități bulgărești nu puteau fi găsite niciodată. Pe polonă făcea prea puțin: „ł” n-are formă descompusă, rămânea „ł”, iar nomenclatorul avea „l”, deci 6.382 din 35.714 nume poloneze erau de negăsit, printre ele Łódź și Wrocław. Litere ca ł, đ, ø, ß, æ și œ n-au formă descompusă, iar chirilica nu trebuie descompusă deloc.

Româna are varianta ei: nomenclatorul ținea un județ cu „t” sub sedilă, forma veche, în 2.055 de rânduri, și cu „ț” cu virgulă, forma corectă, în 2 rânduri, așa că tabelul arăta 43 de județe în loc de 42. În Moldova „â” și „î” sunt același sunet scris în două feluri, iar nomenclatorul avea 149 de străzi cu una și 439 cu cealaltă.

Verificarea e o singură interogare: numără rândurile în care `norm(name) &lt;&gt; name_norm`. Dacă nu iese zero, cauți în altă limbă decât cea în care a fost scris nomenclatorul.

## Pasul 4: trimite-i curierului scrierea și identificatorul lui

API-ul unui curier rezolvă adresa în nomenclatorul curierului, nu în al tău. Găsește localitatea în lista lui și trimite-i identificatorul și numele canonic, nu textul scris de client.

API-ul unui curier ține localitățile din Bulgaria doar în alfabet latin. O căutare în chirilică întoarce zero rezultate. Transliterarea noastră a capitalei dădea „SOFIYA”; curierul are „SOFIA”, iar „SOFIYA” întoarce tot zero. Dacă scriam transliterarea noastră, reparam o stațiune de pe litoral și stricam cel mai mare oraș. Regula rămasă: candidatul nostru e doar un indiciu; scriem exact numele pe care îl are curierul. Căutăm întâi după codul poștal, apoi după numele transliterat, și răspundem doar când rămâne un singur candidat, fiindcă unele nume de sat există în două regiuni.

Aceeași integrare trimitea țara ca nume, nu cod ISO, deci orice comandă din străinătate era tratată ca internă. Mergea din inerție: 116 etichete reușeau fiindcă aveau codul poștal corect, iar curierul cădea pe cod. Picau doar comenzile cu un cod inexistent. Același API întoarce doar 10 rânduri când listezi țări sau localități fără filtru, așa că o hartă construită dintr-o listare nefiltrată a pierdut în tăcere o țară întreagă.

## Pasul 5: respectă limitele câmpurilor și ce lipesc clienții

Clienții lipesc toată adresa în primul rând. API-ul unui curier refuză toată eticheta când câmpul de stradă depășește 50 de caractere; un rând lipit de 59 de caractere a blocat coletul. Acum tăiem câmpul de stradă la 50 și trimitem adresa completă în nota liberă a curierului, pe care o citește șoferul. Nu se pierde nimic; netăiată, se pierdea coletul.

Clienții mai lipesc și regiunea în câmpul de oraș, ca în „Габрово, Габрово”. Dacă numele conține o virgulă, reîncercăm cu partea dinaintea ei. În Polonia numărul casei stă des în al doilea rând de adresă, lipit, ca `2m39` (bloc, separator, apartament); un tipar care cerea limită de cuvânt nu le vedea și trimitea comenzi bune la om. După reparație, ponderea celor trimise la om a scăzut de la 2,5% la 1,0% pe un test de 400 de comenzi reale. Adresele cehe aveau același bug al numărului lipit.

Și literele mari sunt o familie. O regulă care desparte tipul arterei lipit de nume mergea pe Title Case și rupea majusculele: „ALEEA OLT” devenea „ale ea olt”. În 120 de zile, 6.401 din 250.153 de comenzi erau scrise cu majuscule, iar 732 aveau strada mutilată. O reparație anterioară acoperise două din cele trei forme de scriere.

## Unde am greșit

Am avut încredere în endpoint-urile de validare. Apelul de validare a adresei al unui curier a întors VALID pentru trei forme ale aceleiași străzi, inclusiv una greșită, iar apelul de cotație accepta o localitate oricând numele era unic la nivel național, ignorând regiunea scrisă de client. Asta acceptă exact satele mici aflate în altă regiune decât cea scrisă. Verificarea reală e să creezi expedierea și s-o citești înapoi.

Am tratat erorile noastre ca fiind ale clientului. Comenzi au stat zile în așteptare cu nota „adresă greșită”, când eroarea salvată era o excepție din codul nostru; după resetarea contorului de eșecuri, 13 din 14 au primit etichetă din prima încercare. O regulă de ridicare de la oficiu prindea doar cuvântul chirilic pentru „oficiu”, deci o comandă care cerea oficiu scris cu litere latine a plecat la domiciliu. Iar curierul acceptă etichetă și fără stradă, deci „s-a creat eticheta” nu dovedește că există unde livra: 17 comenzi bulgărești care numeau doar un oficiu de curier au rămas la un om.

## Limite

Ratele de recuperare măsurate sunt ale noastre: la primul test ceh, nomenclatorul a recuperat 86% dintre comenzile cu adresă validă respinse de geocoder. Rulat din nou pe 544.336 de comenzi, validatorul a rezolvat 97,20% și a trimis restul la un geocoder. Cifrele descriu clienții, curierii și nomenclatoarele noastre, nu pe ale voastre. În Bulgaria plafonul e mai jos decât în celelalte țări, fiindcă nu există registru oficial de străzi. Nomenclatoarele se schimbă lunar, deci orice construcție e o fotografie.

## Listă de verificare

**1.** Coduri la nivel de stradă sau de localitate? Decide înainte de port. **2.** Găsește defectul nomenclatorului (coduri greșite, santinele, etichete lipsă) înainte să-l încarci. **3.** Dovedește `norm(name) = name_norm` pe fiecare rând; nu descompune chirilica. **4.** Trimite-i curierului identificatorul și scrierea lui; răspunde doar pe un singur candidat. **5.** Taie câmpurile la limita curierului și pune textul complet în notă. **6.** Testează adrese lipite, cu numere alipite și scrise cu majuscule. **7.** Clasifică excepțiile tale ca reîncercabile, nu ca adresă greșită. **8.** Citește expedierea înapoi în loc să crezi un endpoint de validare.

## Întrebări și răspunsuri

### Cum validez adresele de livrare internaționale pentru un magazin online?

Adresele internaționale se validează pe țară. Stabilești întâi dacă acolo codul poștal e la nivel de stradă (România, Polonia) sau de localitate (Cehia, Bulgaria). Încarci un nomenclator național sau deschis, îi verifici defectele cunoscute și normalizezi nomenclatorul și textul clientului cu aceeași funcție. Apoi rezolvi localitatea în lista curierului și trimiți identificatorul lui. Un câmp se repară automat doar când două semnale independente coincid.

### De ce nu găsește căutarea de adrese numele chirilice sau poloneze?

Căutarea ratează numele chirilice și poloneze când normalizează textul altfel decât nomenclatorul stocat. Descompusă, chirilica transformă й în и plus un semn și numele nu se mai potrivesc; ł din polonă n-are formă descompusă, deci rămâne neschimbat, iar nomenclatorul ține l. Numără rândurile în care normalizarea ta diferă de coloana normalizată stocată; orice valoare peste zero înseamnă căutări ratate.

### Trebuie să transliterez adresele bulgărești înainte să le trimit curierului?

Transliterarea adreselor bulgărești folosește doar ca să cauți numele în alfabet latin din lista curierului, nu ca să-ți scrii versiunea pe etichetă. La noi, transliterarea capitalei dădea SOFIYA, iar nomenclatorul curierului avea SOFIA, deci SOFIYA nu găsea nimic. Caută întâi după codul poștal, apoi după numele transliterat, și acceptă rezultatul doar când rămâne exact un candidat.

### Ce fac când rândul de stradă al clientului e prea lung pentru API-ul curierului?

Când rândul de stradă depășește limita câmpului, tai câmpul structurat de stradă la limită și pui adresa completă în nota liberă a curierului, pe care o citește șoferul. API-ul unui curier pe care îl folosim refuză toată eticheta când câmpul de stradă are peste 50 de caractere, deci o adresă lipită netăiată blochează coletul chiar dacă adresa în sine e bună.

### E suficient endpoint-ul de validare al curierului ca să confirm o adresă?

Endpoint-ul de validare al curierului nu ajunge singur. Un apel de validare testat de noi a întors VALID pentru trei forme ale aceleiași străzi, inclusiv una greșită, iar un apel de cotație accepta localitatea oricând numele era unic la nivel național, ignorând regiunea. Creează expedierea și citește-o înapoi de la curier, ca să vezi ce a înțeles el de fapt.

## Cum se citează

**Citare:** Going Stellar (2026). *Normalizarea adreselor de livrare în mai multe țări: coduri poștale, chirilică, limite de lungime*. GOING STELLAR S.R.L.. https://goingstellar.ro/ro/metode/normalizarea-adreselor-de-livrare-internationale/

```bibtex
@misc{goingstellar2026normalising,
  title  = {Normalizarea adreselor de livrare în mai multe țări: coduri poștale, chirilică, limite de lungime},
  author = {{Going Stellar}},
  year   = {2026},
  url    = {https://goingstellar.ro/ro/metode/normalizarea-adreselor-de-livrare-internationale/},
  note   = {2026-10-11}
}
```

Licență. Se poate cita liber, cu atribuire.

## Mai există și

- Pagina în HTML: https://goingstellar.ro/ro/metode/normalizarea-adreselor-de-livrare-internationale/
- Același articol în engleză: https://goingstellar.ro/methods/normalising-international-delivery-addresses/
