Header ads

Header ads
» »

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ụng giờ đã 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?

credti-card.jpg
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án Luhn để 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ẻ Visa luôn bắt đầu bằng số 4, thẻ MasterCard thì thường bắt đầu bằng số 5, và thẻ Discover luôn mở đầu bằng số 6.

credit-card-structure.jpeg
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.
luhn-algorithm-graphic-d2-TEXT.jpeg
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


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.

Quảng cáo


Khóa học Machine Learning cơ bản- Khoa học dữ liệu - AI
==***==

Khoá học Quản trị Chiến lược Dành cho Lãnh đạo Doanh nghiệp

Nhấn vào đây để bắt đầu khóa học

==***==
Nơi hội tụ Tinh Hoa Tri Thức - Khơi nguồn Sáng tạo
Để tham gia khóa học công nghệ truy cập link: http://thuvien.hocviendaotao.com
Mọi hỗ trợ về công nghệ email: dinhanhtuan68@gmail.com
--- 

Khóa học Hacker và Marketing từ A-Z trên ZALO!

Khóa học Hacker và Marketing từ A-Z trên Facebook!

Khóa đào tạo Power BI phân tích báo cáo để bán hàng thành công

Bảo mật và tấn công Website - Hacker mũ trắng
Hacker mũ trắng
KHÓA HỌC LẬP TRÌNH PYTHON TỪ CƠ BẢN ĐẾN CHUYÊN NGHIỆP

Khóa học Lập trình Visual Foxpro 9 - Dành cho nhà quản lý và kế toán

Khóa học hướng dẫn về Moodle chuyên nghiệp và hay
Xây dựng hệ thống đào tạo trực tuyến chuyên nghiệp tốt nhất hiện nay.



Khóa học AutoIt dành cho dân IT và Marketing chuyên nghiệp

Khoá học Word từ cơ bản tới nâng cao, học nhanh, hiểu sâu


Khóa học hướng dẫn sử dụng Powerpoint từ đơn giản đến phức tạp HIỆU QUẢ
Khóa học Thiết kế, quản lý dữ liệu dự án chuyên nghiệp cho doanh nghiệp bằng Bizagi
Khoa hoc hay
Khóa học Phân tích dữ liệu sử dụng Power Query trong Excel

Khóa học Lập trình WEB bằng PHP từ cơ bản đến nâng cao

Khóa học Phân tích dữ liệu sử dụng TableAU - Chìa khóa thành công!
Nhấn vào đây để bắt đầu khóa học


Khóa học Phân tích dữ liệu sử dụng SPSS - Chìa khóa thành công!


Khóa học "Thiết kế bài giảng điện tử", Video, hoạt hình 
kiếm tiền Youtube bằng phần mềm Camtasia Studio
Khóa học HƯỚNG DẪN THIẾT KẾ VIDEO CLIP CHO DÂN MARKETING CHUYÊN NGHIỆP
Xây dựng website​​​​
HƯỚNG DẪN THIẾT KẾ QUẢNG CÁO VÀ ĐỒ HỌA CHUYÊN NGHIỆP VỚI CANVA
Hãy tham gia khóa học để trở thành người chuyên nghiệp. Tuyệt HAY!😲👍
Khoa hoc hay
MICROSOFT ACCESS



GOOGLE SPREADSHEETS phê không tưởng
Khoa hoc hay
Khóa hoc lập trình bằng Python tại đây

Hãy tham gia khóa học để biết mọi thứ

Để tham gia tất cả các bài học, Bạn nhấn vào đây 

Khóa học lập trình cho bé MSWLogo
Nhấn vào đây để bắt đầu học
Nhấn vào đây để bắt đầu học


Khóa học Ba, Mẹ và Bé - Cùng bé lập trình  TUYỆT VỜI

Khoa hoc hay

Khóa học sử dụng Adobe Presenter-Tạo bài giảng điện tử
Khoa hoc hay
Design Website

Để thành thạo Wordpress bạn hãy tham gia khóa học 
Khóa học sử dụng Edmodo để dạy và học hiện đại để thành công
==***==
Bảo hiểm nhân thọ - Bảo vệ người trụ cột
Cập nhật công nghệ từ Youtube tại link: congnghe.hocviendaotao.com
Tham gia nhóm Facebook
Để tham gia khóa học công nghệ truy cập link: http://thuvien.hocviendaotao.com
Mọi hỗ trợ về công nghệ email: dinhanhtuan68@gmail.com

Nguồn: Tinh Tế

About Học viện đào tạo trực tuyến

Xinh chào bạn. Tôi là Đinh Anh Tuấn - Thạc sĩ CNTT. Email: dinhanhtuan68@gmail.com .
- Nhận đào tạo trực tuyến lập trình dành cho nhà quản lý, kế toán bằng Foxpro, Access 2010, Excel, Macro Excel, Macro Word, chứng chỉ MOS cao cấp, IC3, tiếng anh, phần mềm, phần cứng .
- Nhận thiết kế phần mềm quản lý, Web, Web ứng dụng, quản lý, bán hàng,... Nhận Thiết kế bài giảng điện tử, số hóa tài liệu...
HỌC VIỆN ĐÀO TẠO TRỰC TUYẾN:TẬN TÂM-CHẤT LƯỢNG.
«
Next
Bài đăng Mới hơn
»
Previous
Bài đăng Cũ hơn