Menu

Xác thực địa chỉ khác gì chuẩn hóa địa chỉ?

Xác thực địa chỉ và chuẩn hóa địa chỉ là hai bước khác nhau nhưng hay bị gộp làm một. Bài này giải thích mỗi bước làm được gì, vì sao không có kho địa chỉ chung cho toàn thế giới, và cách xử lý khi kiểm tra thất bại.

Đăng ngày

  • địa chỉ
  • kiểm thử
  • dữ liệu thử

Xác thực địa chỉ là bước trả lời câu hỏi địa chỉ này có tồn tại hay không, còn chuẩn hóa là bước làm cho địa chỉ được viết theo một dạng thống nhất. Hai việc này thường bị gộp vào một khái niệm duy nhất, và chính sự gộp đó tạo ra kỳ vọng sai. Bài này tách hai bước ra, chỉ rõ giới hạn của từng bước, và gợi ý cách thiết kế luồng nhập địa chỉ để không chặn nhầm khách hàng.

Chuẩn hóa và xác thực khác nhau ở đâu?

Chuẩn hóa là việc biến đổi cách viết mà không đổi nội dung: thống nhất chữ hoa chữ thường, bỏ khoảng trắng thừa, chuyển cách viết tắt về dạng đầy đủ, hoặc thêm phần còn thiếu của mã bưu chính. Kết quả của chuẩn hóa là một địa chỉ trông gọn gàng hơn, và về nguyên tắc vẫn trỏ tới đúng nơi mà người dùng muốn nhập.

Xác thực là việc kiểm tra xem địa chỉ đó có thật hay không, hoặc ít nhất có hợp lý hay không. Kết quả của xác thực là một quyết định: chấp nhận, cảnh báo, hoặc từ chối. Hai bước dùng chung dữ liệu đầu vào nhưng cho ra hai loại kết quả hoàn toàn khác nhau, nên gộp chúng lại sẽ khiến thông báo lỗi trở nên mơ hồ với cả người dùng lẫn người viết mã.

Chuẩn hóa địa chỉ thường gồm những bước nào?

Một quy trình chuẩn hóa hợp lý thường bắt đầu bằng việc cắt khoảng trắng ở hai đầu và gộp các khoảng trắng liên tiếp thành một. Tiếp theo là thống nhất chữ hoa chữ thường theo quy ước của quốc gia, vì có nơi tên đường phải viết hoa toàn bộ còn có nơi thì không. Sau đó là bước mở rộng các cách viết tắt phổ biến, và cuối cùng là đối chiếu với danh sách đơn vị hành chính để sửa những lỗi chính tả nhỏ.

Thứ tự này quan trọng. Nếu bạn đối chiếu với danh sách hành chính trước khi gộp khoảng trắng, một cái tên có hai dấu cách ở giữa sẽ không khớp với bất kỳ mục nào trong danh sách, và bạn sẽ kết luận sai rằng tên đó không tồn tại. Ngược lại, nếu bạn mở rộng cách viết tắt trước khi biết quốc gia, bạn có thể biến một chuỗi hợp lệ ở nước này thành một chuỗi vô nghĩa ở nước khác.

Bước Mục đích Có đổi nội dung không?
Cắt và gộp khoảng trắng Loại bỏ khác biệt vô nghĩa Không
Thống nhất chữ hoa chữ thường Dễ so sánh và hiển thị Không
Mở rộng cách viết tắt Đưa về dạng đầy đủ Thường là không
Sửa theo danh sách hành chính Khớp với dữ liệu chuẩn Có thể có

Vì sao không có một kho địa chỉ chung cho toàn thế giới?

Không tồn tại một cơ sở dữ liệu toàn cầu, có thẩm quyền và cập nhật theo thời gian thực, chứa mọi địa chỉ trên thế giới. Mỗi quốc gia quản lý dữ liệu địa chỉ theo cách riêng: có nơi cơ quan bưu chính công bố danh mục, có nơi chính quyền địa phương mới là bên nắm dữ liệu, và cũng có nơi không ai công bố gì cả. Việc địa chỉ mới được xây dựng liên tục cũng khiến mọi danh mục tĩnh đều lạc hậu sau một thời gian.

Hệ quả thực tế là xác thực địa chỉ chỉ có thể làm được đến một mức nào đó, và mức đó phụ thuộc vào quốc gia. Với phần lớn nơi trên thế giới, bước xác thực chỉ kiểm tra được hình thức, chứ không xác nhận được rằng căn nhà đó thực sự tồn tại. Ở một số quốc gia có dữ liệu chính thức, bạn mới có thể kiểm tra tới mức địa chỉ cụ thể, và ngay cả khi đó, kết quả vẫn có thể lệch nếu dữ liệu chưa cập nhật.

Một biểu thức chính quy có đủ để kiểm tra địa chỉ không?

Không. Biểu thức chính quy rất hữu ích cho những trường có cấu trúc chặt như mã bưu chính hay mã quốc gia, vì ở đó số ký tự và bộ ký tự được xác định khá rõ. Nhưng địa chỉ là dữ liệu mở: tên đường có thể chứa chữ số, dấu chấm, dấu gạch nối, chữ viết tắt và cả ký tự không thuộc bảng chữ cái Latin.

Khi bị ép vào một biểu thức chính quy duy nhất, địa chỉ hợp lệ sẽ bị từ chối thường xuyên hơn là địa chỉ sai bị phát hiện. Một quy tắc kiểm tra viết cho một quốc gia sẽ chặn nhầm địa chỉ của quốc gia khác, và theo thời gian, mỗi lần có quốc gia mới, quy tắc đó lại phải nới ra. Cách làm bền vững là kiểm tra theo từng trường và theo từng quốc gia, đồng thời coi các giới hạn độ dài là biện pháp bảo vệ dữ liệu chứ không phải công cụ xác thực.

Khi xác thực thất bại thì nên làm gì?

Hãy phân biệt hai loại thất bại. Loại thứ nhất là lỗi rõ ràng, ví dụ trường bắt buộc để trống hoặc mã quốc gia không tồn tại. Loại này có thể chặn ngay, vì người dùng chắc chắn phải sửa. Loại thứ hai là kết quả không chắc chắn: hệ thống không tìm thấy địa chỉ trong danh mục của mình, nhưng điều đó không chứng minh địa chỉ sai.

Với loại thứ hai, cách làm hợp lý là cảnh báo và cho phép người dùng xác nhận tiếp tục, đồng thời ghi lại sự kiện để theo dõi. Nếu chặn cứng, bạn sẽ loại bỏ một nhóm khách hàng hợp lệ mà không có cách nào để họ tự sửa, đặc biệt là ở những quốc gia mà dữ liệu của bạn thưa nhất. Nếu bạn cần một bộ địa chỉ để thử cả hai nhánh này, hãy xem bài dữ liệu địa chỉ trong kiểm thử.

Thử luồng nhập địa chỉ bằng dữ liệu mẫu

Trình tạo địa chỉ giả của trang này sinh địa chỉ theo đúng định dạng của quốc gia bạn chọn, với các trường khớp nhau giữa đơn vị hành chính, thành phố và mã bưu chính. Bạn có thể dùng mẫu đó để thử cả nhánh chấp nhận lẫn nhánh cảnh báo trong luồng nhập địa chỉ, và để kiểm tra xem hệ thống có từ chối nhầm khi địa chỉ hợp lệ về hình thức hay không.

Toàn bộ dữ liệu là tổng hợp, không trỏ tới một căn nhà có thật nào, và chỉ dùng cho kiểm thử phần mềm.

Phần dành cho nhà phát triển

Hãy đặt chuẩn hóa lên trước xác thực trong mọi luồng, vì xác thực dựa trên một chuỗi chưa được làm sạch sẽ cho kết quả không đáng tin. Đồng thời, hãy để kết quả của hai bước này tách biệt trong mã nguồn: một hàm trả về địa chỉ đã chuẩn hóa, một hàm khác trả về kết luận xác thực kèm lý do.

Những điểm khác nên chuẩn bị:

  • Ghi lại lý do thất bại cụ thể, ví dụ trường nào sai hoặc quốc gia nào không được hỗ trợ, thay vì chỉ trả về một câu báo lỗi chung.
  • Cho phép người dùng ghi đè kết quả xác thực khi hệ thống không chắc chắn, và ghi lại việc ghi đè đó.
  • Kiểm thử với quốc gia không có mã bưu chính, quốc gia dùng chữ không phải Latin, và địa chỉ có hai dòng đường.
  • Đừng để quy tắc kiểm tra phụ thuộc vào dữ liệu của một quốc gia duy nhất, vì đó là cách nhanh nhất để chặn nhầm toàn bộ phần còn lại của thế giới.
  • Cân nhắc chi phí khi gọi dịch vụ xác thực bên ngoài, và đặt giới hạn thời gian chờ để biểu mẫu không bị treo.

Bước tiếp theo

Hãy rà lại luồng nhập địa chỉ hiện tại của bạn và xác định chỗ nào là chuẩn hóa, chỗ nào là xác thực. Sau đó mở trình tạo địa chỉ giả để lấy vài địa chỉ hợp lệ về hình thức và thử xem hệ thống có chặn nhầm chúng không, đặc biệt với những quốc gia bạn ít khi thử tới.

Đọc tiếp

Bài viết về Trình tạo địa chỉ giả