Menu

Số điện thoại và địa chỉ có luôn khớp với nhau?

Số điện thoại và địa chỉ thường được coi là hai mảnh dữ liệu khớp nhau, nhưng trên thực tế chúng khớp ngày càng ít. Bài này giải thích cấu tạo số điện thoại, vì sao mã vùng không còn chỉ đúng nơi ở, và cách xử lý trong biểu mẫu.

Đăng ngày

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

Số điện thoại và địa chỉ là hai trường thường được thiết kế như thể chúng chắc chắn khớp nhau, trong khi thực tế mối liên hệ đó đã lỏng đi từ lâu. Người dùng giữ số cũ sau khi chuyển nhà, dùng số của người khác trong gia đình, hoặc đăng ký số ở một tỉnh rồi sống ở tỉnh khác. Bài này giải thích vì sao chuyện đó xảy ra, và cách thiết kế biểu mẫu để không chặn nhầm người dùng.

Một số điện thoại được cấu tạo từ những phần nào?

Về mặt hình thức, một số điện thoại quốc tế gồm hai phần: mã quốc gia và phần số quốc gia. Mã quốc gia dài từ một tới ba chữ số, và phần còn lại do mỗi quốc gia tự quy định. Mỗi quốc gia cũng đặt một độ dài tối đa cho toàn bộ số, và độ dài này khác nhau giữa các nơi.

Bên trong phần số quốc gia, nhiều nước tiếp tục chia thành mã nhà mạng và số thuê bao, hoặc mã vùng và số thuê bao. Cách chia này thay đổi theo từng quốc gia và theo thời gian, nên nếu bạn muốn kiểm tra độ dài tối thiểu và tối đa thì nên xử lý theo từng quốc gia thay vì áp một quy tắc chung cho toàn thế giới.

Một chi tiết nhỏ nhưng hay gây lỗi là số không ở đầu. Rất nhiều quốc gia dùng số không làm chữ số bắt đầu cho các cuộc gọi nội địa, và chữ số đó bị bỏ đi khi gọi từ nước ngoài. Nếu hệ thống của bạn lưu số ở dạng quốc tế nhưng lại hiển thị theo dạng nội địa, hoặc ngược lại, bạn sẽ thấy những số trông sai lệch dù người dùng nhập hoàn toàn đúng.

Mã vùng có còn cho biết người dùng ở đâu không?

Trước đây, câu trả lời gần như là có. Mã vùng được phân bổ theo khu vực địa lý, nên nhìn vào mã vùng là có thể đoán tương đối người dùng đang ở tỉnh hay thành phố nào. Điều này từng được dùng để kiểm tra tính nhất quán giữa địa chỉ và số điện thoại.

Ngày nay, suy luận đó không còn đáng tin. Tính năng chuyển mạng giữ số cho phép người dùng đổi nhà mạng mà vẫn giữ nguyên số cũ, và điều đó cũng có nghĩa là quan hệ giữa dãy số và khu vực địa lý bị cắt. Một số điện thoại có mã vùng của nơi này hoàn toàn có thể thuộc về người đang sống ở nơi khác, và điều đó không phải là ngoại lệ hiếm gặp.

Hệ quả trực tiếp là bạn không nên dùng mã vùng để suy ra địa chỉ, cũng không nên dùng địa chỉ để phán đoán số điện thoại. Việc kiểm tra tính nhất quán giữa hai trường này chỉ nên ở mức cảnh báo nội bộ, không bao giờ được dùng làm lý do từ chối.

Vì sao số di động thường không gắn với một thành phố?

Số di động khác số cố định ở chỗ nó không thuộc về một vị trí vật lý. Không có dây dẫn nào buộc nó vào một căn nhà hay một tổng đài ở một khu vực cụ thể, nên việc gán một thành phố cho số di động ngay từ đầu đã là một suy luận, không phải một dữ kiện.

Vì vậy, những biểu mẫu bắt buộc người dùng chọn tỉnh thành trước khi nhập số điện thoại thường tạo ra dữ liệu sai chứ không tạo ra dữ liệu sạch. Người dùng sẽ chọn đại một tỉnh cho qua bước, và cái bạn nhận được là một trường không có giá trị thông tin, lại còn làm bẩn báo cáo thống kê.

Cách làm hợp lý hơn là tách hai trường ra hoàn toàn. Địa chỉ là nơi cần giao hàng hoặc gửi thư, còn số điện thoại là kênh liên hệ. Hai thứ đó không nhất thiết phải trùng nhau, và việc cho phép chúng khác nhau giúp biểu mẫu đúng hơn mà không mất thêm thông tin nào.

Có nên bắt buộc số điện thoại khớp với địa chỉ không?

Nếu mục tiêu là giảm gian lận hoặc giảm chi phí giao hàng thất bại, việc so khớp có vẻ hấp dẫn. Nhưng cái giá phải trả thường lớn hơn lợi ích thu được, vì bạn sẽ chặn một nhóm người dùng hoàn toàn hợp lệ: người vừa chuyển nhà, người dùng số của gia đình, người đi làm xa, người dùng số trả trước mua ở nơi khác.

Nếu vẫn muốn kiểm tra, hãy làm ở mức nhẹ nhàng. Hệ thống có thể ghi lại sự khác biệt giữa mã quốc gia của số điện thoại và mã quốc gia của địa chỉ, rồi dùng thông tin đó cho mục đích nội bộ như xếp hàng rà soát thủ công. Người dùng thì vẫn được tiếp tục, và không phải giải thích lý do.

Cần chú ý cả trường hợp ngược lại: mã quốc gia của số điện thoại khác mã quốc gia của địa chỉ có thể là dấu hiệu bình thường với người sống gần biên giới hoặc người nước ngoài đặt hàng về nhà người thân. Bất kỳ quy tắc nào không tính tới những tình huống đó đều sẽ tạo ra cảnh báo giả với tỉ lệ cao.

Số điện thoại nên được lưu và hiển thị thế nào?

Cách lưu phổ biến và dễ kiểm soát là tách mã quốc gia khỏi phần số còn lại. Hai trường riêng giúp việc kiểm tra độ dài theo từng quốc gia trở nên rõ ràng, và giúp việc hiển thị theo định dạng nội địa trở thành một bước trình bày, không phải một phép biến đổi dữ liệu gốc.

Phần dữ liệu Nên lưu thế nào Ghi chú khi hiển thị
Mã quốc gia Trường riêng, có thể rỗng Có thể hiện hoặc ẩn tùy ngữ cảnh
Phần số quốc gia Chỉ gồm chữ số Nhóm theo quy ước của quốc gia đó
Định dạng xuất ra Không lưu Tính lại mỗi lần hiển thị
Nhãn nhà mạng Không suy ra từ số Không dùng để kiểm tra chéo

Điểm cuối cùng đáng nhấn mạnh: đừng lưu kết quả của những phép suy luận như nhà mạng hay khu vực. Chúng có thể thay đổi mà số điện thoại không đổi, nên chúng sẽ sớm trở thành dữ liệu sai nằm lẫn trong bản ghi đúng.

Thử biểu mẫu có cả địa chỉ và số điện thoại

Trình tạo địa chỉ giả của trang này sinh địa chỉ theo từng quốc gia và kèm phần số điện thoại với mã quốc gia tương ứng, nên bạn có sẵn dữ liệu để thử cả hai trường cùng lúc. Mỗi trường sao chép được riêng, vì vậy bạn có thể thử trường hợp địa chỉ ở một nước còn số điện thoại ở nước khác để xem hệ thống phản ứng thế nào.

Dữ liệu là tổng hợp và chỉ dùng cho kiểm thử phần mềm. Bạn có thể đọc thêm danh sách ca kiểm thử cho hai trường này ở bài kiểm thử định dạng địa chỉ và số điện thoại.

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

Hãy coi số điện thoại là một trường độc lập với địa chỉ, ngay từ thiết kế cơ sở dữ liệu. Việc gộp chúng lại chỉ vì giao diện đặt cạnh nhau là một quyết định khó đảo ngược về sau, khi bạn cần cho phép người dùng nhập hai giá trị khác nhau.

Những điểm khác nên chốt:

  • Kiểm tra độ dài theo từng quốc gia, và cho phép cấu hình thay vì viết cứng trong mã.
  • Không từ chối dữ liệu chỉ vì mã vùng không khớp với địa chỉ.
  • Chuẩn hóa số điện thoại về một dạng lưu duy nhất, và chỉ định dạng lại khi hiển thị.
  • Kiểm thử số có mã quốc gia khác với mã quốc gia của địa chỉ, số có chữ số bắt đầu bị bỏ, và số quá ngắn hoặc quá dài.
  • Kiểm thử cả trường hợp người dùng chỉ nhập địa chỉ mà không có số điện thoại, nếu trường đó không thực sự bắt buộc.
  • Với dữ liệu sinh tự động, đảm bảo phần số điện thoại và địa chỉ trong cùng bản ghi không mâu thuẫn về độ dài hay định dạng.

Bước tiếp theo

Hãy kiểm tra xem biểu mẫu của bạn có đang bắt buộc số điện thoại khớp với địa chỉ theo cách nào không, kể cả những quy tắc ngầm trong mã kiểm tra. Sau đó mở trình tạo địa chỉ giả và thử vài quốc gia với cả địa chỉ lẫn số điện thoại để xem hệ thống có chấp nhận chúng hay không.

Đọc tiếp

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