هر توسعهدهندهای که یک فرم آدرس برای مشتریان اروپایی ساخته است در نهایت حقیقت را کشف میکند: هیچ فرمت کد پستی اروپایی وجود ندارد. هر کشور فرمت خود را دارد و تفاوتها واقعاً معنادار هستند. این صفحه یک مرجع کشور به کشور است که EU-27 بهعلاوه کشورهای کلیدی غیراروپایی را پوشش میدهد، با الگوهای regex و راهنماییهای اعتبارسنجی که در محیط production نیاز دارید.
الگوی سطح بالا
کدهای پستی اروپایی به تقریباً چهار گروه تقسیم میشوند:
- عددی ۵ رقمی: آلمان، فرانسه، ایتالیا، اسپانیا، فنلاند، کرواسی، استونی، یونان، لیتوانی، اسلواکی.
- عددی ۴ رقمی: بلژیک، بلغارستان، مجارستان، اتریش، سوئیس، لیختناشتاین، لوکزامبورگ، نروژ، اسلوونی، دانمارک.
- الفبایی-عددی، فرمت ثابت: هلند (۴ رقم بهعلاوه ۲ حرف)، ایرلند (Eircode، ۷ کاراکتر الفبایی-عددی)، مالت (۳ حرف بهعلاوه ۴ رقم).
- الفبایی-عددی سلسلهمراتبی: انگلستان (طول متغیر، دوبخشی).
بهعلاوه چند استثنا: سوئد از ۵ رقم با یک فاصله بعد از سوم استفاده میکند (123 45)، لهستان از ۵ رقم با یک خط تیره بعد از دوم (00-001)، چکیه از ۵ رقم با یک فاصله بعد از سوم (110 00).
مرجع EU-27
| کشور | ISO | فرمت | مثال | Regex |
|---|---|---|---|---|
| اتریش | AT | ۴ رقم | 1010 | ^\d{4}$ |
| بلژیک | BE | ۴ رقم | 1000 | ^\d{4}$ |
| بلغارستان | BG | ۴ رقم | 1000 | ^\d{4}$ |
| کرواسی | HR | ۵ رقم | 10000 | ^\d{5}$ |
| قبرس | CY | ۴ رقم | 1010 | ^\d{4}$ |
| چکیه | CZ | NNN NN | 110 00 | ^\d{3} ?\d{2}$ |
| دانمارک | DK | ۴ رقم | 1050 | ^\d{4}$ |
| استونی | EE | ۵ رقم | 10111 | ^\d{5}$ |
| فنلاند | FI | ۵ رقم | 00100 | ^\d{5}$ |
| فرانسه | FR | ۵ رقم | 75008 | ^\d{5}$ |
| آلمان | DE | ۵ رقم | 10115 | ^\d{5}$ |
| یونان | GR | NNN NN | 105 63 | ^\d{3} ?\d{2}$ |
| مجارستان | HU | ۴ رقم | 1051 | ^\d{4}$ |
| ایرلند | IE | Eircode | D02 X285 | ^[A-Z]\d{2} ?[A-Z0-9]{4}$ |
| ایتالیا | IT | ۵ رقم | 00184 | ^\d{5}$ |
| لتونی | LV | LV-NNNN | LV-1050 | ^LV-\d{4}$ |
| لیتوانی | LT | LT-NNNNN | LT-01100 | ^LT-\d{5}$ |
| لوکزامبورگ | LU | ۴ رقم | 1234 | ^\d{4}$ |
| مالت | MT | LLL NNNN | VLT 1234 | ^[A-Z]{3} ?\d{4}$ |
| هلند | NL | NNNN LL | 1011 AB | ^\d{4} ?[A-Z]{2}$ |
| لهستان | PL | NN-NNN | 00-001 | ^\d{2}-\d{3}$ |
| پرتغال | PT | NNNN-NNN | 1000-001 | ^\d{4}-\d{3}$ |
| رومانی | RO | ۶ رقم | 010001 | ^\d{6}$ |
| اسلواکی | SK | NNN NN | 811 01 | ^\d{3} ?\d{2}$ |
| اسلوونی | SI | ۴ رقم | 1000 | ^\d{4}$ |
| اسپانیا | ES | ۵ رقم | 28013 | ^\d{5}$ |
| سوئد | SE | NNN NN | 111 22 | ^\d{3} ?\d{2}$ |
کشورهای کلیدی غیراروپایی
| کشور | ISO | فرمت | مثال | Regex |
|---|---|---|---|---|
| انگلستان | GB | سلسلهمراتبی | SW1A 1AA | ^[A-Z]{1,2}\d[A-Z\d]? ?\d[A-Z]{2}$ |
| سوئیس | CH | ۴ رقم | 8001 | ^\d{4}$ |
| نروژ | NO | ۴ رقم | 0150 | ^\d{4}$ |
| ایسلند | IS | ۳ رقم | 101 | ^\d{3}$ |
| لیختناشتاین | LI | ۴ رقم | 9490 | ^\d{4}$ |
کد پستی انگلستان به تفصیل
سیستم انگلستان متراکمترین اطلاعات را در اروپا دارد. یک کد مثل SW1A 1AA به این اجزا تجزیه میشود:
SW: ناحیه پستی (لندن جنوب غربی)SW1A: منطقه پستی (St James's و Pimlico)SW1A 1: بخش پستی (چند خیابان)SW1A 1AA: واحد پستی (نقطه تحویل خاص، اغلب یک ساختمان)
این سلسلهمراتب یعنی یک کد پستی انگلیسی میتواند یک ساختمان را شناسایی کند، به همین دلیل محصولات انگلیسی اغلب از کد پستی به عنوان یک proxy برای گروهبندی سطح محله یا حتی سطح خیابان استفاده میکنند. تقریباً هیچ سیستم کد پستی کشور دیگری این کار را نمیکند.
الگوهای اعتبارسنجی Production
ارزانترین رویکرد production یک جدول regex مخصوص هر کشور مثل جدول بالاست که بر اساس یک کد کشور از آدرس اعمال میشود. کد کشور میتواند از اینجا بیاید:
- یک dropdown که کاربر صریحاً انتخاب کرده
- IP geolocation کاربر
- نتیجه geocoder (اکثر geocoderهای production کد پستی را نرمالسازی میکنند و کد کشور را در پاسخ شامل میکنند)
از تلاش برای اعتبارسنجی کد پستی بدون دانستن کشور خودداری کنید. یک کد ۴ رقمی در ۱۲ کشور معتبر و در بسیاری دیگر نامعتبر است.
برای جریانهای پرخطر (checkout، KYC، صنایع تحت نظارت)، در regex متوقف نشوید. آدرس را به یک geocoder بفرستید و یک پاسخ با دقت "rooftop" یا "street" را به عنوان اعتبارسنجی، نه فقط تطابق regex، در نظر بگیرید. یک کد پستی با فرمت صحیح هنوز میتواند با یک آدرس واقعی مطابقت نداشته باشد.
ذخیرهسازی و نرمالسازی
کدهای پستی را به صورت رشته ذخیره کنید، نه عدد. صفرهای پیشرو مهم هستند (01100 یک کد لیتوانیایی معتبر است؛ 1100 نیست). قراردادهای فرمت ذخیرهسازی:
- برای مقایسه در سراسر مجموعه دادهها، کاراکترهای غیرالفبایی-عددی را حذف کنید.
- در خروجی در فرمت canonical کشور (با خط تیره، فاصله، پیشوند) نمایش دهید.
- همیشه کد کشور را در کنار کد پستی ذخیره کنید، حتی اگر محصول شما امروز فقط در یک کشور فعالیت کند. Schema به گسترش چندکشوری بدون migration مقیاس میشود.
چطور MapAtlas کمک میکند
Geocoding API MapAtlas یک فیلد address_components.postal_code نرمالشده برای هر کشور پشتیبانیشده، اعتبارسنجیشده در برابر دادههای منبع، برمیگرداند. Search API یک کد پستی را به عنوان ورودی جستجو میپذیرد و مکان مطابق را برمیگرداند. هر دو API در EU میزبانی شدهاند، با GDPR سازگار هستند و روی دادههای OSM با parser های آدرس مخصوص هر کشور ساخته شدهاند.
برای بررسی عمیقتر نحوه تبدیل آدرسها به مختصات، What Is a Geocode را ببینید. برای مکانیک طول جغرافیایی و عرض جغرافیایی پشت هر پاسخ مختصات، Longitude vs Latitude را ببینید.
سوالات متداول
فرمت کدهای پستی اروپایی چیست؟
هیچ فرمت کد پستی یکپارچه اروپایی وجود ندارد. هر کشور فرمت خاص خود را تعریف میکند. اکثر از یک کد عددی با طول ثابت استفاده میکنند (۵ رقم در آلمان، فرانسه، ایتالیا، اسپانیا؛ ۴ رقم در بلژیک، مجارستان، اتریش، سوئیس)، اما چندتایی از کدهای الفبایی-عددی استفاده میکنند (هلند ۴ رقم بهعلاوه ۲ حرف، انگلستان یک سیستم الفبایی-عددی دوبخشی پیچیده، ایرلند Eircode با ۷ کاراکتر الفبایی-عددی). یک اعتبارسنج آدرس کارآمد باید یک pattern مخصوص هر کشور برای EU-27 بهعلاوه کشورهای کلیدی غیراروپایی داشته باشد.
آیا کد پستی آلمانی (Postleitzahl) مثل کد پستی لهستانی است؟
هر دو پنج کاراکتر هستند اما ساختار متفاوت است. آلمان از ۵ رقم پیوسته استفاده میکند (مثلاً 10115). لهستان از ۲ رقم، یک خط تیره و سپس ۳ رقم (مثلاً 00-001) استفاده میکند. برای ذخیرهسازی، میتوانید فرم canonical با خط تیره برای لهستان و بدون خط تیره برای آلمان را نگه دارید. برای مطابقت در سراسر مجموعه دادهها، با حذف کاراکترهای غیرالفبایی-عددی نرمالسازی کنید و در نمایش فرمت مخصوص کشور را مجدداً اعمال کنید.
چطور یک کد پستی از هر کشور اروپایی اعتبارسنجی کنم؟
ابتدا کشور را شناسایی کنید (از آدرس، یک کد کشور ISO 3166-1 alpha-2، یا geolocation کاربر). سپس الگوی regex آن کشور را اعمال کنید. اعتبارسنجی آگاه به کشور الگوی استاندارد production است، چون یک regex جهانی واحد یا کدهای معتبر را رد میکند یا کدهای آشکارا نامعتبر را میپذیرد. MapAtlas Geocoding API یک کد پستی نرمالشده در هر کشور در `address_components` خود برمیگرداند، بنابراین معمولاً اجازه میدهید geocoder مرحله اعتبارسنجی را برای شما انجام دهد.
چرا سیستم کد پستی انگلستان اینقدر متفاوت به نظر میرسد؟
کدهای پستی انگلستان از یک سیستم الفبایی-عددی سلسلهمراتبی استفاده میکنند که ناحیه پستی، منطقه، بخش و واحد را در دو قسمت encode میکند (مثلاً SW1A 1AA برای کاخ باکینگهام). اطلاعات spatial بیشتری در هر کد نسبت به اکثر سیستمهای کشوری حمل میکند، به همین دلیل کدهای پستی انگلستان گاهی به عنوان یک proxy برای محله یا حتی خیابانهای جداگانه استفاده میشوند.

