Thuật toán vui: làm sao mà anh chị em ta biết thẻ tín dụng nhập đúng hay sai?
07/10/2025 08:45
Thuật toán vui: làm sao biết thẻ tín dụng nhập đúng hay sai mà không cần liên lạc nhà bank
Hiện nay,thẻ tín dụnggiờ đã trở thành một vật dụng quen thuộc với hầu hết mọi người. Mỗi lần cần thanh toán online, anh em chỉ cần gõ dãy số in trên thẻ, điền CCV, sau đó có thể nhập OTP là hoàn thành giao dịch. Tuy nhiên, đã bao giờ anh em thắc mắc những con số trên thẻ có ý nghĩa gì không Liệu có quy tắc nào để tạo ra chúng, và tại sao hệ thống thanh toán có thể phát hiện ra lỗi gõ sai ngay lập tức mà không cần gửi yêu cầu kiểm tra vềngân hàng? Thẻ tín dụng đã trở thành một phần quan trọng trong cuộc sống của loài người
Trên thực tế, có một quy tắc toán học đơn giản là thuật toánLuhnđể kiểm tra số thẻ tín dụng. Mà không chỉ thế, nhiều mã số khác trong cuộc sống cũng được kiểm tra bằng toán học, ví dụ như mã vạch sản phẩm, số theo dõi bưu kiện, số tài khoản ngân hàng hoặc ISBN sách đều dùng các thuật toán kiểm tra tính hợp lệ tương tự Luhn để phát hiện lỗi nhập liệu.
Cấu trúc số thẻ tín dụng
Thoạt nhìn, dãy số trên thẻ tín dụng chỉ như một chuỗi ký tự ngẫu nhiên. Nhưng thực tế, chúng được sắp xếp có cấu trúc rõ ràng. Chữ số đầu tiên của thẻ cho anh em biết loại tổ chức phát hành (Major Industry Identifier). Ví dụ như thẻVisaluôn bắt đầu bằng số 4, thẻ MasterCard thì thường bắt đầu bằng số 5, và thẻDiscoverluôn mở đầu bằng số 6.
Cấu trúc thẻ tín dụng. Ví dụ thẻ này, bỏ số check digit đi sẽ còn 4024 6072 3695 074
Năm đến bảy chữ số tiếp theo xác định ngân hàng hoặc tổ chức tài chính phát hành thẻ (Issuer Identifier). Sau đó là phần dành cho số tài khoản cá nhân của bạn trong ngân hàng đó. Và quan trọng nhất: con số cuối cùng, gọi là “check digit”, không liên quan gì đến tài khoản hay ngân hàng, mà được thêm vào chỉ để phục vụ cho một bài toán kiểm tra tính hợp lệ thông qua thuật toán Luhn.
Về mặt kỹ thuật, các tổ chức phát hành sẽ chọn số tài khoản cá nhân trước, rồi dùng thuật toán Luhn tính toán ra số “check digit” sao cho cả dãy số thỏa mãn điều kiện toán học kiểm tra, chứ không phải lấy ngẫu nhiên như chúng ta lầm tưởng.
Thuật toán Luhn: nguồn gốc và cách hoạt động
Như vậy, việc check digit được tạo ra dựa trên thuật toán Luhn. Thuật toán này do nhà nghiên cứu Hans Peter Luhn của IBM phát minh và đăng ký bằng sáng chế vào năm 1960. Thuật toán này vô cùng đơn giản nhưng hiệu quả. Nguyên lý như sau:
Bỏ qua chữ số cuối cùng, lấy toàn bộ dãy số còn lại.
Bắt đầu từ phải sang trái, nhân đôi mỗi chữ số ở vị trí cách một.
Nếu phép nhân đôi cho ra số có hai chữ số, cộng gộp các chữ số đó lại (ví dụ 7 x 2 = 14 thì tính 1 + 4 = 5).
Cộng tất cả lại với check digit. Nếu tổng chia hết cho 10, số thẻ hợp lệ; nếu không, hệ thống sẽ báo lỗi.
Như trong hình này, với số thẻ ví dụ ở trên, anh em bỏ số cuối cùng (check digit ra). Sau đó từ phải qua trái, bắt đầu từ số 4, cứ cách 1 số thì sẽ nhân hai. Rồi tính tổng lại tất cả lại. Nếu phép nhân cho ra kết quả là 18, anh em lấy 1 + 8
Mình đã thử với mấy thẻ tín dụng của mình và thấy là tổng đều chia hết cho 10. Điểm thú vị mà anh em có thể thấy được là giải thuật này chỉ bao gồm các phép tính cơ bản như nhân và cộng. Vì thế, nó được tích hợp sẵn trong phần mềm xử lý giao dịch mà không cần gọi qua bên thứ ba. Điều này giúp tiết kiệm thời gian và chi phí cho doanh nghiệp.
Cơ chế này giúp phát hiện hầu hết lỗi thường gặp khi nhập số thẻ: gõ nhầm một con số hoặc hoán đổi hai con số liền kề. Chẳng hạn, nếu bạn nhập 6 thành 5, tổng sẽ thay đổi và lập tức không còn chia hết cho 10. Tuy nhiên, có một ngoại lệ duy nhất là khi đổi chỗ 0 và 9: tức 09 đổi thành 90), tổng vẫn giữ nguyên.
QUẢNG CÁO
Khám phá thêm
Tai nghe không dây
mua xe Mitsubishi Xpander
mua máy quay DJI
Thiết bị công nghệ
bàn phím
tai nghe Razer Blackshark V3
mua sạc iPhone 17
AirProce
giá xe Kia Morning
Trung tâm công nghệ
Theo nghiên cứu của nhà toán học Jacobus Verhoeff, 90% lỗi nhập số thực tế là nhầm một số hoặc hoán đổi hai số cạnh nhau. Thuật toán Luhn bắt được gần hết các trường hợp này ngoại trừ 09/90. Để khắc phục, nhà toán học Jacobus Verhoeff năm 1969 đã phát triển một thuật toán phức tạp hơn, có thể phát hiện cả trường hợp 09/90 cùng nhiều lỗi tinh vi khác. Dù vậy, Verhoeff không phổ biến vì độ phức tạp cao, trong khi Luhn đã quá đơn giản và đủ tốt cho thực tế.
Vì sao Luhn được tin dùng và giới hạn của thuật toán này
Mỗi lần anh em thanh toán, dữ liệu thẻ cuối cùng vẫn được gửi đến hệ thống xác thực của ngân hàng. Nhưng nếu mọi lỗi gõ nhầm đơn giản cũng phải qua bước xác thực này, giao dịch sẽ tốn thêm thời gian và doanh nghiệp phải trả thêm phí xử lý. Luhn đóng vai trò như lớp xác thực đầu tiên khi chỉ cần vài phép tính cơ bản, hệ thống thanh toán tại chỗ đã loại bỏ được gần 90% lỗi nhập liệu. Nhờ đó, người dùng không mất công chờ đợi, còn doanh nghiệp thì tiết kiệm chi phí.
Tuy nhiên, một điểm lưu ý là thuật toán Luhn chỉ loại bỏ số thẻ không hợp lệ thôi. Vãn còn tồn tại trường hợp có số giả mạo vượt qua lớp kiểm tra của thuật toán này. Khi đó, các bước xác thực kiên cố hơn sẽ được thực hiện phía sau bởi hệ thống ngân hàng để xử lý gian lận hoặc lỗi phức tạp hơn.
Điểm mạnh của Luhn là đơn giản, nhưng nó cũng có giới hạn. Như đã nói, nếu đổi chỗ 0 và 9 thì thuật toán không phát hiện được. Về mặt toán học, việc hoán đổi hai chữ số liền kề thường làm thay đổi tổng kiểm tra (ví dụ cặp số 3 và 1 khi đảo chỗ sẽ khiến tổng khác đi 2 đơn vị), do đó chắc chắn không còn chia hết cho 10. Nhưng riêng trường hợp 0 và 9 thì tổng lại giữ nguyên, dẫn đến “khe hở” duy nhất này.
Kết luận
Lần tới khi bạn thấy thông báo “số thẻ không hợp lệ” hiện lên, hãy nhớ rằng có một “mánh toán học” nho nhỏ đang âm thầm hoạt động phía sau. Thuật toán Luhn – dù ra đời từ thập niên 1960 – đến nay vẫn là công cụ đắc lực, giúp bảo vệ người dùng và tiết kiệm chi phí cho doanh nghiệp. Một minh chứng rõ ràng rằng đôi khi, giải pháp đơn giản lại chính là giải pháp bền vững nhất.
Giá vàng giao ngay tăng 0,8%, đạt mức đỉnh mọi thời đại 4.241,77 USD/ounce tính đến 03h11 GMT, tức 10h11 sáng giờ Việt Nam. Nhưng có thể đó chưa phải là điểm dừng của giá...