Cập nhật lần cuối:
Định dạng địa chỉ theo quốc gia và số ký tự - Thiết kế form nhập liệu toàn cầu
Địa chỉ khác nhau giữa các quốc gia ở gần như mọi thứ: thứ tự các thành phần, số chữ số của mã bưu chính, cả chuyện thành phần nào là bắt buộc. Thiết kế form mà không biết thành phần nào làm số ký tự phình lên thì kết quả là những trường nhập mà địa chỉ thật không vừa. Bài viết này mổ xẻ một địa chỉ Nhật Bản rồi đếm từng phần, đọc các giới hạn độ dài mà một chuẩn dữ liệu bưu chính quốc gia thực sự quy định, và từ hai thứ đó dựng ra những giá trị maxlength có căn cứ.
Cấu trúc địa chỉ theo quốc gia - Thành phần và thứ tự
Điểm khác biệt đầu tiên giữa các nước không phải độ dài mà là thứ tự sắp xếp: có nước viết từ đơn vị lớn xuống nhỏ, có nước làm ngược lại.
| Quốc gia | Thứ tự thành phần | Đặc điểm |
|---|---|---|
| Nhật Bản | Mã bưu chính, tỉnh, thành phố, quận, khu phố, số nhà | Viết từ đơn vị lớn đến nhỏ, mã bưu chính 7 chữ số |
| Mỹ | Số nhà, đường, thành phố, bang, mã ZIP | Viết từ nhỏ đến lớn, ZIP code 5 hoặc 9 chữ số |
| Anh | Số nhà, đường, thành phố, mã bưu chính | Postcode ngắn (6-8 ký tự) nhưng định vị rất chính xác |
| Đức | Đường + số nhà, mã bưu chính, thành phố | Số nhà đặt sau tên đường |
| Hàn Quốc | Tỉnh, thành phố, quận, phường (dong), số nhà | Giống Nhật, viết từ lớn đến nhỏ |
| Thái Lan | Số nhà, moo, soi, đường, khet, khwaeng, tỉnh, mã bưu chính | Nhiều cấp hành chính hơn phần lớn các nước |
| Brazil | Đường, số nhà, thông tin bổ sung, khu phố, thành phố, bang, mã CEP | Có trường "complemento" đặc trưng |
Hệ thống hành chính của Thái Lan có nhiều cấp (changwat, amphoe, tambon, moo) và địa danh viết bằng chữ Thái thường dài, nên một địa chỉ đầy đủ ở Bangkok phải xâu chuỗi rất nhiều thành phần. Bắt buộc mọi người dùng theo một thứ tự duy nhất, hoặc gán cứng ý nghĩa cho từng trường, là cách nhanh nhất để làm khó những địa chỉ như vậy.
Một chuẩn dữ liệu bưu chính quy định giới hạn nào - PAF của Royal Mail
Thay vì đoán độ dài "thường gặp", ta có thể đọc thẳng con số từ một chuẩn dữ liệu bưu chính quốc gia. Royal Mail công bố độ dài tối đa của từng trường trong Postcode Address File (PAF) - tệp địa chỉ chính thức của Anh. Đây là giới hạn của từng trường riêng lẻ, không phải độ dài địa chỉ trung bình.
| Trường trong PAF | Độ dài tối đa | Vai trò |
|---|---|---|
| Organisation Name | 60 ký tự | Tên tổ chức tại địa chỉ đó |
| Department Name | 60 ký tự | Bộ phận bên trong tổ chức |
| PO Box | 30 ký tự | Số hộp thư |
| Sub Building Name | 50 ký tự | Căn hộ, tầng, đơn nguyên |
| Building Number | 4 ký tự | Số nhà dạng chữ số |
| Building Name | 60 ký tự | Tên tòa nhà khi không có số |
| Thoroughfare Descriptor | 20 ký tự | Phần loại đường: Street, Road, Lane... |
| Thoroughfare Name | 60 ký tự | Phần tên riêng của đường |
| Dependent Thoroughfare Descriptor | 20 ký tự | Loại đường phụ thuộc |
| Dependent Thoroughfare Name | 35 ký tự | Tên đường phụ thuộc |
| Double Dependent Locality | 35 ký tự | Khu vực nhỏ nhất |
| Dependent Locality | 30 ký tự | Khu vực trong phạm vi post town |
| Postcode | 7 ký tự | Mã bưu chính, chưa tính dấu cách |
Cộng cả 13 trường lại được 471 ký tự - nhưng không địa chỉ nào dùng hết tất cả các trường cùng lúc. Con số "80 ký tự" đôi khi được nhắc đến như giới hạn tên đường theo PAF thực chất là phép cộng của hai trường: Thoroughfare Name (60) và Thoroughfare Descriptor (20). Trong PAF không tồn tại một trường đơn lẻ nào dài 80 ký tự. Đây chính là kiểu sai sót dễ mắc khi thiết kế form: gộp hai trường của chuẩn dữ liệu thành một rồi tưởng đó là giới hạn gốc.
Thử với một địa chỉ Anh dạng ví dụ (địa chỉ giả định, không phải địa chỉ thật) - "Flat 3, 27 Elm Street, Kensington, London, W8 5DL" - toàn bộ chuỗi chỉ dài 49 ký tự, tức khoảng một phần mười tổng giới hạn của các trường. Giới hạn trường tồn tại để đỡ những trường hợp ngoại lệ, không phải để mô tả trường hợp phổ biến.
Mã bưu chính - Từ 4 đến 10 ký tự
Mã bưu chính (postal code) là thành phần địa chỉ có độ dài chênh lệch nhiều nhất giữa các quốc gia.
| Quốc gia | Định dạng | Độ dài | Ví dụ |
|---|---|---|---|
| Nhật Bản | NNN-NNNN | 8 ký tự (tính cả dấu gạch) | 100-0001 |
| Mỹ | NNNNN hoặc NNNNN-NNNN | 5 hoặc 10 ký tự | 10001, 10001-1234 |
| Anh | AN NAA, ANN NAA, v.v. | 6-8 ký tự | SW1A 1AA |
| Canada | ANA NAN | 7 ký tự | K1A 0B1 |
| Đức | NNNNN | 5 ký tự | 10115 |
| Brazil | NNNNN-NNN | 9 ký tự (tính cả dấu gạch) | 01001-000 |
| Ireland | ANN XXXX | 8 ký tự (tính cả dấu cách) | D02 AF30 |
Mã bưu chính của Anh nằm trong số những hệ thống rắc rối nhất. Vì có tới 6 định dạng hợp lệ (A9 9AA, A99 9AA, A9A 9AA, AA9 9AA, AA99 9AA, AA9A 9AA), một mẫu regex viết vội rất dễ từ chối nhầm những mã hoàn toàn hợp lệ. Nhiều lập trình viên vì thế chọn cách chỉ kiểm tra độ dài và dạng thức cơ bản thay vì cố validate cho thật chuẩn.
Bù lại cho sự rắc rối đó là độ phân giải: một mã bưu chính Anh viết đầy đủ thu hẹp phạm vi xuống còn một nhóm khoảng mười địa chỉ, hoặc một điểm nhận thư duy nhất nếu nơi đó nhận lượng thư lớn. Mã bưu chính Nhật Bản chỉ định vị tới cấp khu phố, nên vẫn cần nhập tiếp số nhà. Cùng gọi là "mã bưu chính" nhưng lượng thông tin hai bên mang theo khác nhau hẳn, và điều đó quyết định form có tự động điền được đến đâu.
Ireland là trường hợp đáng nhắc riêng: hệ thống Eircode chỉ được đưa vào sử dụng năm 2015, muộn hơn hẳn các nước châu Âu khác. Một Eircode gồm 7 ký tự, chia làm hai phần: 3 ký tự đầu là routing key chỉ khu vực chia chọn thư, 4 ký tự sau là định danh riêng của từng điểm nhận thư. Nhờ vế sau này mà mỗi địa chỉ có một mã riêng biệt - điều rất cần thiết ở một nước mà nhiều nhà tại vùng nông thôn không có số nhà, chỉ có tên nhà và tên khu vực.
Thiết kế maxlength cho form địa chỉ - Bài toán cân bằng
Chọn maxlength cho trường địa chỉ là bài toán cân bằng giữa an toàn dữ liệu (chặn dữ liệu rác) và trải nghiệm người dùng (không cắt mất địa chỉ hợp lệ). Các giá trị dưới đây lấy căn cứ từ hai nguồn đã nêu ở trên: giới hạn trường của PAF và số ký tự đo được của những tên riêng dài trong thực tế.
| Trường | maxlength gợi ý | Lý do |
|---|---|---|
| Địa chỉ dòng 1 (đường, số nhà) | 100 ký tự | PAF: Thoroughfare Name 60 + Descriptor 20 + Building Number 4 = 84, còn dư chỗ |
| Địa chỉ dòng 2 (bổ sung) | 100 ký tự | PAF: Building Name 60, Sub Building Name 50 - đủ cho từng trường kèm chú thích ngắn |
| Thành phố | 60 ký tự | PAF giới hạn Dependent Locality ở 30 ký tự, nhưng tên làng ở xứ Wales dưới đây dài 58 ký tự |
| Tỉnh/Bang | 50 ký tự | Tên chính thức của bang Veracruz de Ignacio de la Llave (Mexico) dài 31 ký tự |
| Mã bưu chính | 12 ký tự | Định dạng dài nhất trong bảng trên là 10 ký tự, chừa dư cho dấu cách và biến thể |
| Quốc gia | 60 ký tự | "The United Kingdom of Great Britain..." dài 56 ký tự |
Một trong những địa danh dài nhất mà bưu chính thực sự phải xử lý là ngôi làng ở xứ Wales: "Llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch", đo được đúng 58 ký tự. Vẫn có địa danh dài hơn nữa - ngọn đồi Taumatawhakatangihangakoauauotamateaturipukakapikimaungahoronukupokaiwhenuakitanatahu ở New Zealand đo được 85 ký tự - nhưng làng ở xứ Wales là nơi có người ở và có địa chỉ nhận thư, nên nó đặt ra một mức sàn thực tế cho trường thành phố. Con số 58 đó là lý do trực tiếp để không đặt maxlength 30 ký tự cho trường này.
Địa chỉ Nhật Bản - Mổ xẻ cấu trúc và độ dài
Địa chỉ Nhật Bản có cấu trúc đặc trưng: viết từ đơn vị lớn xuống đơn vị nhỏ, ngược với phần lớn các nước phương Tây.
Cách chắc chắn nhất để biết thành phần nào làm địa chỉ dài ra là đo từng phần. Bảng dưới đây tách một địa chỉ Nhật thành các thành phần rồi đếm số ký tự của mỗi phần, với quy ước: dấu cách nửa chiều rộng tính là 1 ký tự, ký hiệu 〒 không tính.
| Thành phần | Ví dụ | Số ký tự | Ghi chú |
|---|---|---|---|
| Mã bưu chính | 100-0001 | 8 | Luôn cố định 8 ký tự tính cả dấu gạch |
| Tỉnh (đô/phủ/huyện) | 東京都 / 神奈川県 | 3 / 4 | 44 trong 47 tỉnh viết bằng 3 ký tự, chỉ 3 tỉnh cần 4 ký tự |
| Thành phố và quận | さいたま市浦和区 | 8 | Thành phố có quận thì cộng dồn hai cấp |
| Khu phố và số nhà | 丸の内 1-1-1 | 9 | Phần số rất gọn nhờ hệ thống chome-banchi-go |
| Tên tòa nhà | パークコート赤坂ザ・タワー | 13 | Thành phần biến động nhiều nhất |
| Tên tòa nhà kèm số phòng | パークコート赤坂ザ・タワー 1501 号室 | 21 | Số phòng cộng thêm khoảng 8 ký tự |
Nối toàn bộ các thành phần trên thành một chuỗi (mã bưu chính, tỉnh, thành phố và quận, khu phố và số nhà, tên tòa nhà kèm số phòng, ngăn nhau bằng dấu cách) được 53 ký tự. Điều đáng chú ý là tỉnh - phần mà nhiều người tưởng phải chừa nhiều chỗ - chỉ chiếm 3 hoặc 4 ký tự kanji, trong khi tên tòa nhà một mình đã chiếm 13 ký tự và lên tới 21 khi kèm số phòng. Nếu phải siết giới hạn ký tự, đó là trường cần được chừa dư nhất.
Nét riêng của địa chỉ Nhật là hệ thống "chome-banchi-go" (丁目-番地-号): đánh số theo lô đất trong khu vực thay vì theo mặt đường, nên tìm đường ở Nhật khó hơn so với hệ thống phương Tây. Bù lại, xét về số ký tự thì cách viết này rất gọn - cụm "3-15-7" chỉ chiếm 6 ký tự.
Khi thiết kế form cho thị trường Nhật, nên tách địa chỉ thành các trường riêng: mã bưu chính (dùng để tự động điền tỉnh và thành phố), phần còn lại của địa chỉ, và tên tòa nhà. Cách này vừa giảm lỗi gõ nhầm vừa giữ cho dữ liệu có cấu trúc. Như đã phân tích trong bài Xác thực đầu vào form, chia nhỏ trường nhập liệu giúp kiểm soát chất lượng dữ liệu tốt hơn hẳn.
Địa chỉ quốc tế trong thương mại điện tử - Thách thức thực tế
Một cửa hàng bán ra nước ngoài phải nhận địa chỉ từ hàng trăm quốc gia và vùng lãnh thổ với thứ tự thành phần khác nhau. Trên thực tế chỉ có hai hướng thiết kế, và mỗi hướng đánh đổi một thứ khác nhau.
Hướng thứ nhất là form thích ứng theo quốc gia: người dùng chọn quốc gia trước, rồi số trường, nhãn trường và thứ tự hiển thị đổi theo. Chọn Nhật Bản thì mã bưu chính lên đầu và có thể dùng để tự động điền tỉnh, thành phố; chọn Mỹ thì đổi sang thứ tự số nhà trước rồi mới đến bang và mã ZIP. Người dùng thấy đúng những trường mà nước mình vẫn dùng, nhưng bên vận hành phải duy trì một bộ định nghĩa định dạng địa chỉ cho từng quốc gia và cập nhật khi có thay đổi.
Hướng thứ hai là hai dòng nhập tự do: một cặp trường địa chỉ với giới hạn ký tự rộng, kèm các trường riêng cho thành phố, tỉnh/bang và mã bưu chính. Mô hình này hợp với mọi thứ tự viết vì nó không gán ý nghĩa cho từng dòng, và giới hạn trường của PAF ở trên cho biết cần chừa bao nhiêu chỗ. Đổi lại, dữ liệu thu về ít cấu trúc hơn, nên việc validate và chuẩn hóa về sau vất vả hơn.
Với các dự án nhỏ, giải pháp thiết thực là dùng API chuẩn hóa địa chỉ như Google Places Autocomplete: người dùng gõ vài chữ đầu, API gợi ý ngay địa chỉ đầy đủ và có cấu trúc. Vừa giảm lỗi nhập liệu, vừa bảo đảm định dạng chuẩn, trải nghiệm lại tốt hơn. Như đã bàn trong bài Thiết kế độ dài văn bản đa ngôn ngữ, xử lý địa chỉ quốc tế là một trong những phần hóc búa nhất của thiết kế form đa ngôn ngữ.
Xu hướng tương lai - Địa chỉ số và mã hóa vị trí
Hệ thống what3words chia toàn bộ bề mặt Trái Đất thành các ô vuông 3 m x 3 m và gán cho mỗi ô một "địa chỉ" gồm 3 từ. Chẳng hạn "filled.count.soap" trỏ đến một vị trí cụ thể với độ chính xác 3 m. Chuỗi này đo được 17 ký tự - ngắn hơn hầu hết mọi thành phần địa chỉ trong các bảng ở trên, mà vẫn khoanh được một ô 3 m x 3 m mà không cần đến tên đường hay số nhà.
Plus Codes của Google (ví dụ dạng rút gọn "8Q7X+MR Tokyo") cũng là một hệ thống mã hóa vị trí ngắn gọn: một mã đầy đủ 10 ký tự khoanh vị trí trong phạm vi khoảng 14 m x 14 m, và thêm ký tự nữa thì phạm vi càng nhỏ. Những hệ thống kiểu này đặc biệt hữu ích ở nơi không có địa chỉ truyền thống - vùng nông thôn hẻo lánh, khu định cư tự phát, hay những quốc gia chưa xây xong hệ thống địa chỉ.
Dù vậy, địa chỉ truyền thống sẽ chưa biến mất sớm đâu. Con người vẫn cần một địa chỉ đọc được để trao đổi với nhau, và mạng lưới bưu chính toàn cầu vẫn vận hành trên địa chỉ dạng chữ. Bài toán của nhà phát triển là đỡ được cả hai trong cùng một form nhập liệu: địa chỉ truyền thống để tương thích ngược, mã vị trí để có độ chính xác cao.