Chuyện mùa phượng vĩ
-
Bùi Lê Tuấn Anh
- 05 Tháng 08 2025

Kính chào quý độc giả, đây là bài thứ năm của Tech Blog xuất hiện trở lại trên website này. Ngày hôm nay, rất nhiều nội dung thú vị sẽ được chia sẻ tại chiếc Tech Blog này. Với tựa đề Chuyện mùa phượng vĩ, đây sẽ là những câu chuyện được tổng hợp lại dưới góc nhìn hài hước và dễ hiểu nhất về những vấn đề khác nhau diễn ra từ đầu năm đến nay. Mời quý vị chuyển sang các thẻ khác nhau ứng với từng phần của bài viết.
- P1
- P2
Chuyện ở Microsoft Support (2024)
Như vậy là chỉ sau hơn bốn tháng rưỡi công tác, tôi cũng đã kết thúc nhiệm vụ của mình với vai trò Kỹ sư hỗ trợ tại iTechWX - một đơn vị hợp tác với Microsoft. Trụ sở chính của đơn vị được đặt tại Trung Quốc, và chính vì thế nguồn lực tài chính của đơn vị này là không thiếu. Thứ duy nhất còn thiếu ở đây là thiếu thời gian (vâng, tôi không nói đùa đâu) 🤣
Một ngày điển hình của Anthony
Mỗi ngày, nhiệm vụ của tôi là tiếp nhận và hỗ trợ cho ít nhất hai khách hàng mới. Đồng thời, các vấn đề của những khách hàng cũ chưa giải quyết được vẫn phải tiếp tục theo dõi và liên lạc khi cần. Có những ngày, số lượng khách cần hỗ trợ trên hàng đợi của tôi lên đến con số 20 - một con số khiến tôi choáng ngợp. Điều đáng lưu tâm ở đây là yêu cầu theo sát “hàng ngày”, ngoài ra mỗi yêu cầu có phương thức liên lạc khác nhau, đòi hỏi việc mình luôn duy trì trực điện thoại và email suốt từ 8h sáng đến 5h chiều.
Chuyện tăng ca, gần như là cơm bữa…
Tấn công và Phòng thủ
- Nguồn: C# Corner
Nhóm tôi tham gia là nhóm SCC (Security and Compliance Centers), một trong những nhóm trực tiếp làm việc với những vấn đề liên quan đến tất cả phương thức tấn công và phòng thủ trên các hệ thống của Microsoft. Tại đây, mình được học rất nhiều thứ về công nghệ, đặc biệt là các hình thức tấn công phổ biến diễn ra trên không gian mạng cũng như một số giải pháp bảo vệ dữ liệu mật chống thất thoát ra bên ngoài. Để nói về lí do mà mình phải lựa chọn ngưng việc, có hai điều mình đã lưu tâm:
- Do áp lực lớn về số lượng và yêu cầu theo dõi khách mỗi ngày
- Do một số vấn đề cá nhân
Tất nhiên, sẽ là vô nghĩa nếu như cứ vịn vào câu “Muốn thì tìm cách, không muốn sẽ tìm lý do” để bào chữa cho năng lực của bản thân mình. Nhưng sẽ có ý nghĩa hơn khi vào ngày cuối cùng mình làm việc tại công ty, mọi người gửi cho mình những món quà cảm ơn vì “không để lại bất kỳ gánh nặng lớn nào” liên quan đến vé hỗ trợ của khách hàng (tự nhiên thấy nhẹ nhõm vì không bị mọi người gọi là “báo thủ đời đầu”) 🤣
Những câu chuyện vui và bài học cho tất cả chúng ta
Trong quá trình thực hiện nhiệm vụ của mình, tôi bắt gặp một vấn đề khá hóc búa: Làm sao để bảo vệ dữ liệu thẻ tín dụng của các ngân hàng khi chia sẻ qua các nền tảng khác?. Từ đây, hành trình khám phá ra bí mật đằng sau các dãy số trên những chiếc thẻ VISA, MasterCard được bắt đầu:
- Ngay sau khi nhận được yêu cầu, tôi nhanh chóng bắt tay vào thực hiện phân tích và hỗ trợ, tuy nhiên khách hàng có vẻ khá khó tính, không đồng ý với bất kỳ giải pháp “chữa cháy” nào.
- Tôi tiếp tục phân tích thông tin của dãy số, và dần dần phát hiện ra vấn đề lớn: Dãy số thẻ tín dụng đều có quy luật chung của nó cả. Và mỗi dãy số thẻ đều tuân thủ nghiêm ngặt theo thuật toán Luhn - thuật toán “đồng dư modulo 10”. Lúc này khách hàng có vẻ như đã hiểu ra được vấn đề thật sự nằm ở sự “ngẫu nhiên” đầy tai hại này.
- Khách hàng yêu cầu giải pháp tiếp theo nhằm đảm bảo không thất thoát số thẻ tín dụng nhưng vẫn cho phép chia sẻ các mã số khác. Lúc này yêu cầu trở nên khó khăn, và ở thời điểm đó, theo như yêu cầu từ phía Microsoft, tôi tiến hành tham vấn với chuyên viên cấp cao của nhóm và xin hỗ trợ trên vé của khách.
Tới đây, tôi chợt hiểu ra một điều: Hóa ra tất cả chúng ta đều bị lừa - mọi chiếc thẻ tín dụng quốc tế, đều có chung 1 bộ khung, đồng nghĩa với việc nếu để lộ ra dù chỉ có một chút thông tin trên thẻ, cũng sẽ gây ra rất nhiều hệ lụy cho chính bản thân chủ thẻ. Vấn đề bảo mật dữ liệu nhạy cảm, cũng vì thế, ngày càng trở nên cấp thiết, nhất là trong hoàn cảnh công cuộc chuyển đổi số đang diễn ra ngày càng mạnh mẽ hơn bao giờ hết.
Tại thời điểm tôi kết thúc công tác, việc hỗ trợ vẫn đang tiếp tục diễn ra. Cũng đang hóng xem là chuyên viên đã xử lý tới đâu rồi, và khách đã giải quyết được vấn đề hay chưa, chứ để mang tiếng đẩy việc khó cho chuyên viên thì khổ thân tôi lắm 😂
Phần phụ lục phía dưới sẽ cung cấp cho mọi người một cái nhìn tổng quan về thuật toán Luhn - thuật toán được sử dụng để kiểm tra tính hợp lệ của các dãy số thẻ tín dụng. Thuật toán này được phát minh bởi Hans Peter Luhn, một kỹ sư của IBM, và đã được cấp bằng sáng chế vào năm 1960.
Và đây là tất cả những gì mà bài viết này mang đến cho tất cả mọi người. Hy vọng mọi người từ đây sẽ hiểu rõ và ý thức hơn trong quá trình bảo vệ dữ liệu cá nhân của mình. Xin hẹn gặp lại quý vị ở phần 2 - nơi mà một câu chuyện mới về Giám sát hệ thống sẽ được trình bày. Tạm biệt.
Tuấn Anh
Kỷ nguyên mới đã bắt đầu…
Xin chào, đã bao lâu rồi mình mới lại viết lách nhỉ? Chắc là nửa năm hơn thì phải…
Trải qua biết bao nhiêu thăng trầm, giờ đây mình mới ngồi ở đây, hồi tưởng về những ngày tháng đầy cảm xúc đã qua, và kể mọi người nghe về hành trình của mình.
Hôm nay, cũng là dịp kỷ niệm ba năm những câu chuyện đầu tiên được lên sóng (05/08/2022 - 05/08/2025). Từ tên miền cũ, sang tên miền mới, giờ đây hãy sẵn sàng bắt đầu kỷ nguyên mới ngay từ bây giờ thôi nào!
Mất tích? Tuấn Anh vẫn ở đây mà! 👨🏫
Ngày 26/02/2024, mình đi vận động hành lang để xin một chỗ tham gia “Học kỳ bị mất tích”. Từ đó, mọi người bắt đầu chú ý đến mình theo một cách không ai ngờ đến. Nếu mọi người thắc mắc câu chuyện của học kỳ ấy ra sao, xin mời xem lại bài viết trước đó tại phần hai của series Tản mạn đầu năm, ở đây.
Ngỡ rằng chắc là “mình chỉ may mắn đúng lần đó là thôi, giờ trở về làm một Kỹ sư hỗ trợ (Helpdesk Engineer)” nhưng không, mọi người lại bắt mình đi content recovery tiếp cả nhà ạ! 😂
Năm ngoái, mình làm CS101 - năm nay nâng cấp lên thành CS102, đem theo chút quà cáp và trò chơi cho mọi người thưởng thức sự thú vị của chiếc Speaker - Diễn giả thân thương, với chiếc áo làm nên thương hiệu này:
Một ngày làm việc năng suất khi DevOps kết hợp Điện toán đám mây, khi Trí tuệ nhân tạo kết hợp với khả năng tương tác con người không giới hạn. Và rất, rất nhiều câu hỏi đã xuất hiện trong ngày hôm đó (thật là đau lưng khi phải trả lời mọi người, giống như hình dưới chẳng hạn): 🤣
Ấy vậy mà ở đó, mình nhìn thấy được tương lai của đất nước: Một tương lai với rất nhiều những gương mặt triển vọng, đầy khát khao và tinh thần tận hiến, sẵn sàng thay thế mình tiếp tục con đường làm chủ công nghệ số - mạch nguồn làm nên vận mệnh đất nước. Ở đó, mình nhìn thấy một không gian sáng tạo không ngừng, trong từng giây phút được làm việc với các bạn của bộ phận Sản xuất chương trình và cả với các bạn khán giả.
Ở đó, mình cũng thấy được sự lạc quan, và đôi khi là cả sự hài hước nữa (anh xin lỗi Bình - tự nhiên anh nhìn mặt em ở tấm hình phía trên xong anh nhớ cái tên này lắm, và anh cũng sẽ không quên cái khoảnh khắc lật kèo mãn nhãn sau câu nói của anh đâu em à). 😅
Tất cả những điều ấy, làm nên một thương hiệu, một bản dạng độc nhất mà được mọi người đón chờ hằng năm.
Rất là cảm ơn mấy bạn bên GDGoC của nhà Tự nhiên đã mang cá thể này từ chỗ hiu quạnh quay về với “môi trường sống thân quen” sau nhiều năm bôn ba vất vả ngược xuôi (chắc đi khắp cái thành phố rồi quá).
Nhưng mà nè, nói gì thì nói, tiền quảng cáo vẫn là năm mươi ngàn, chuyển khoản nhé GDGoC - HCMUS, thiếu anh hai năm rồi!
Ba năm, một chặng đường bền bỉ… 📆
Nhìn lại chuyến hành trình “tàu lượn” này, có lẽ mình sẽ chỉ dùng một từ thôi: Liều.
Bắt đầu từ những viên gạch đầu tiên là những bài viết được mang từ Facebook về, dùng một cái tên miền miễn phí, cho đến khi liều mình giật được một tên miền chính thức để khai phá khoảng không gian trên môi trường mạng với giá chỉ bằng một ly trà sữa, nhưng trả cho cả năm. Từ một mình, đến liều để thêm nhiều “mình” khác cùng hợp sức, để rồi, khi mỗi người đi trên một lộ trình khác nhau của riêng mình, họ vẫn ngoái lại và nhìn về những dấu chân đã để lại nơi đây.
Từng áng văn chương bất tận, từng bài thơ, câu chữ, khắc ghi những dòng tâm trạng muôn hình vạn vẻ, từ bồi hồi xao xuyến đến lắng đọng xúc cảm, từ phá lên cười khúc khích cho đến những giọt nước mắt không thể kìm nén.
Sau ba năm, với hơn 80 bài viết nhỏ, hơn 30 bài viết lớn được chỉ vài con người chắp bút, The Collab Team dù có thể không tiếp tục sứ mệnh của mình một cách liên tục như trước đây nữa, nhưng những “Anna, Latte, Jolie, Anthony” vẫn sẽ là những người bạn đồng hành cùng mọi người trên những hướng đi mới, nơi từng cá nhân vẫn sẽ không ngừng góp nhặt những dòng văn thơ nhỏ bé kia và biến nó trở thành những “giấc mơ lớn” của tất cả chúng ta.
Người ta dạo này hay nói về “Kỷ nguyên vươn mình” - ở đây chúng tôi cũng sẽ có “Kỷ nguyên mới”!
Tất nhiên, Tech Blog vẫn sẽ tiếp tục những dòng chảy của mình và mang đến nhiều hơn những pha tấu hài cũng như cà khịa kinh điển hơn nữa, giúp mọi người hiểu hơn về các xu hướng mới của công nghệ hiện nay. Hãy tiếp tục chờ đón tại đây nhé.
Còn bây giờ, đã đến lúc nói lời chào đầu tiên: Xin chào các bạn, mình đã quay trở lại rồi đây!
Tuấn Anh
Chuyện ở Microsoft Support (2024)
Như vậy là chỉ sau hơn bốn tháng rưỡi công tác, tôi cũng đã kết thúc nhiệm vụ của mình với vai trò Kỹ sư hỗ trợ tại iTechWX - một đơn vị hợp tác với Microsoft. Trụ sở chính của đơn vị được đặt tại Trung Quốc, và chính vì thế nguồn lực tài chính của đơn vị này là không thiếu. Thứ duy nhất còn thiếu ở đây là thiếu thời gian (vâng, tôi không nói đùa đâu) 🤣
Một ngày điển hình của Anthony
Mỗi ngày, nhiệm vụ của tôi là tiếp nhận và hỗ trợ cho ít nhất hai khách hàng mới. Đồng thời, các vấn đề của những khách hàng cũ chưa giải quyết được vẫn phải tiếp tục theo dõi và liên lạc khi cần. Có những ngày, số lượng khách cần hỗ trợ trên hàng đợi của tôi lên đến con số 20 - một con số khiến tôi choáng ngợp. Điều đáng lưu tâm ở đây là yêu cầu theo sát “hàng ngày”, ngoài ra mỗi yêu cầu có phương thức liên lạc khác nhau, đòi hỏi việc mình luôn duy trì trực điện thoại và email suốt từ 8h sáng đến 5h chiều.
Chuyện tăng ca, gần như là cơm bữa…
Tấn công và Phòng thủ
- Nguồn: C# Corner
Nhóm tôi tham gia là nhóm SCC (Security and Compliance Centers), một trong những nhóm trực tiếp làm việc với những vấn đề liên quan đến tất cả phương thức tấn công và phòng thủ trên các hệ thống của Microsoft. Tại đây, mình được học rất nhiều thứ về công nghệ, đặc biệt là các hình thức tấn công phổ biến diễn ra trên không gian mạng cũng như một số giải pháp bảo vệ dữ liệu mật chống thất thoát ra bên ngoài. Để nói về lí do mà mình phải lựa chọn ngưng việc, có hai điều mình đã lưu tâm:
- Do áp lực lớn về số lượng và yêu cầu theo dõi khách mỗi ngày
- Do một số vấn đề cá nhân
Tất nhiên, sẽ là vô nghĩa nếu như cứ vịn vào câu “Muốn thì tìm cách, không muốn sẽ tìm lý do” để bào chữa cho năng lực của bản thân mình. Nhưng sẽ có ý nghĩa hơn khi vào ngày cuối cùng mình làm việc tại công ty, mọi người gửi cho mình những món quà cảm ơn vì “không để lại bất kỳ gánh nặng lớn nào” liên quan đến vé hỗ trợ của khách hàng (tự nhiên thấy nhẹ nhõm vì không bị mọi người gọi là “báo thủ đời đầu”) 🤣
Những câu chuyện vui và bài học cho tất cả chúng ta
Trong quá trình thực hiện nhiệm vụ của mình, tôi bắt gặp một vấn đề khá hóc búa: Làm sao để bảo vệ dữ liệu thẻ tín dụng của các ngân hàng khi chia sẻ qua các nền tảng khác?. Từ đây, hành trình khám phá ra bí mật đằng sau các dãy số trên những chiếc thẻ VISA, MasterCard được bắt đầu:
- Ngay sau khi nhận được yêu cầu, tôi nhanh chóng bắt tay vào thực hiện phân tích và hỗ trợ, tuy nhiên khách hàng có vẻ khá khó tính, không đồng ý với bất kỳ giải pháp “chữa cháy” nào.
- Tôi tiếp tục phân tích thông tin của dãy số, và dần dần phát hiện ra vấn đề lớn: Dãy số thẻ tín dụng đều có quy luật chung của nó cả. Và mỗi dãy số thẻ đều tuân thủ nghiêm ngặt theo thuật toán Luhn - thuật toán “đồng dư modulo 10”. Lúc này khách hàng có vẻ như đã hiểu ra được vấn đề thật sự nằm ở sự “ngẫu nhiên” đầy tai hại này.
- Khách hàng yêu cầu giải pháp tiếp theo nhằm đảm bảo không thất thoát số thẻ tín dụng nhưng vẫn cho phép chia sẻ các mã số khác. Lúc này yêu cầu trở nên khó khăn, và ở thời điểm đó, theo như yêu cầu từ phía Microsoft, tôi tiến hành tham vấn với chuyên viên cấp cao của nhóm và xin hỗ trợ trên vé của khách.
Tới đây, tôi chợt hiểu ra một điều: Hóa ra tất cả chúng ta đều bị lừa - mọi chiếc thẻ tín dụng quốc tế, đều có chung 1 bộ khung, đồng nghĩa với việc nếu để lộ ra dù chỉ có một chút thông tin trên thẻ, cũng sẽ gây ra rất nhiều hệ lụy cho chính bản thân chủ thẻ. Vấn đề bảo mật dữ liệu nhạy cảm, cũng vì thế, ngày càng trở nên cấp thiết, nhất là trong hoàn cảnh công cuộc chuyển đổi số đang diễn ra ngày càng mạnh mẽ hơn bao giờ hết.
Tại thời điểm tôi kết thúc công tác, việc hỗ trợ vẫn đang tiếp tục diễn ra. Cũng đang hóng xem là chuyên viên đã xử lý tới đâu rồi, và khách đã giải quyết được vấn đề hay chưa, chứ để mang tiếng đẩy việc khó cho chuyên viên thì khổ thân tôi lắm 😂
Phần phụ lục phía dưới sẽ cung cấp cho mọi người một cái nhìn tổng quan về thuật toán Luhn - thuật toán được sử dụng để kiểm tra tính hợp lệ của các dãy số thẻ tín dụng. Thuật toán này được phát minh bởi Hans Peter Luhn, một kỹ sư của IBM, và đã được cấp bằng sáng chế vào năm 1960.
Và đây là tất cả những gì mà bài viết này mang đến cho tất cả mọi người. Hy vọng mọi người từ đây sẽ hiểu rõ và ý thức hơn trong quá trình bảo vệ dữ liệu cá nhân của mình. Xin hẹn gặp lại quý vị ở phần 2 - nơi mà một câu chuyện mới về Giám sát hệ thống sẽ được trình bày. Tạm biệt.
Tuấn Anh
Kỷ nguyên mới đã bắt đầu…
Xin chào, đã bao lâu rồi mình mới lại viết lách nhỉ? Chắc là nửa năm hơn thì phải…
Trải qua biết bao nhiêu thăng trầm, giờ đây mình mới ngồi ở đây, hồi tưởng về những ngày tháng đầy cảm xúc đã qua, và kể mọi người nghe về hành trình của mình.
Hôm nay, cũng là dịp kỷ niệm ba năm những câu chuyện đầu tiên được lên sóng (05/08/2022 - 05/08/2025). Từ tên miền cũ, sang tên miền mới, giờ đây hãy sẵn sàng bắt đầu kỷ nguyên mới ngay từ bây giờ thôi nào!
Mất tích? Tuấn Anh vẫn ở đây mà! 👨🏫
Ngày 26/02/2024, mình đi vận động hành lang để xin một chỗ tham gia “Học kỳ bị mất tích”. Từ đó, mọi người bắt đầu chú ý đến mình theo một cách không ai ngờ đến. Nếu mọi người thắc mắc câu chuyện của học kỳ ấy ra sao, xin mời xem lại bài viết trước đó tại phần hai của series Tản mạn đầu năm, ở đây.
Ngỡ rằng chắc là “mình chỉ may mắn đúng lần đó là thôi, giờ trở về làm một Kỹ sư hỗ trợ (Helpdesk Engineer)” nhưng không, mọi người lại bắt mình đi content recovery tiếp cả nhà ạ! 😂
Năm ngoái, mình làm CS101 - năm nay nâng cấp lên thành CS102, đem theo chút quà cáp và trò chơi cho mọi người thưởng thức sự thú vị của chiếc Speaker - Diễn giả thân thương, với chiếc áo làm nên thương hiệu này:
Một ngày làm việc năng suất khi DevOps kết hợp Điện toán đám mây, khi Trí tuệ nhân tạo kết hợp với khả năng tương tác con người không giới hạn. Và rất, rất nhiều câu hỏi đã xuất hiện trong ngày hôm đó (thật là đau lưng khi phải trả lời mọi người, giống như hình dưới chẳng hạn): 🤣
Ấy vậy mà ở đó, mình nhìn thấy được tương lai của đất nước: Một tương lai với rất nhiều những gương mặt triển vọng, đầy khát khao và tinh thần tận hiến, sẵn sàng thay thế mình tiếp tục con đường làm chủ công nghệ số - mạch nguồn làm nên vận mệnh đất nước. Ở đó, mình nhìn thấy một không gian sáng tạo không ngừng, trong từng giây phút được làm việc với các bạn của bộ phận Sản xuất chương trình và cả với các bạn khán giả.
Ở đó, mình cũng thấy được sự lạc quan, và đôi khi là cả sự hài hước nữa (anh xin lỗi Bình - tự nhiên anh nhìn mặt em ở tấm hình phía trên xong anh nhớ cái tên này lắm, và anh cũng sẽ không quên cái khoảnh khắc lật kèo mãn nhãn sau câu nói của anh đâu em à). 😅
Tất cả những điều ấy, làm nên một thương hiệu, một bản dạng độc nhất mà được mọi người đón chờ hằng năm.
Rất là cảm ơn mấy bạn bên GDGoC của nhà Tự nhiên đã mang cá thể này từ chỗ hiu quạnh quay về với “môi trường sống thân quen” sau nhiều năm bôn ba vất vả ngược xuôi (chắc đi khắp cái thành phố rồi quá).
Nhưng mà nè, nói gì thì nói, tiền quảng cáo vẫn là năm mươi ngàn, chuyển khoản nhé GDGoC - HCMUS, thiếu anh hai năm rồi!
Ba năm, một chặng đường bền bỉ… 📆
Nhìn lại chuyến hành trình “tàu lượn” này, có lẽ mình sẽ chỉ dùng một từ thôi: Liều.
Bắt đầu từ những viên gạch đầu tiên là những bài viết được mang từ Facebook về, dùng một cái tên miền miễn phí, cho đến khi liều mình giật được một tên miền chính thức để khai phá khoảng không gian trên môi trường mạng với giá chỉ bằng một ly trà sữa, nhưng trả cho cả năm. Từ một mình, đến liều để thêm nhiều “mình” khác cùng hợp sức, để rồi, khi mỗi người đi trên một lộ trình khác nhau của riêng mình, họ vẫn ngoái lại và nhìn về những dấu chân đã để lại nơi đây.
Từng áng văn chương bất tận, từng bài thơ, câu chữ, khắc ghi những dòng tâm trạng muôn hình vạn vẻ, từ bồi hồi xao xuyến đến lắng đọng xúc cảm, từ phá lên cười khúc khích cho đến những giọt nước mắt không thể kìm nén.
Sau ba năm, với hơn 80 bài viết nhỏ, hơn 30 bài viết lớn được chỉ vài con người chắp bút, The Collab Team dù có thể không tiếp tục sứ mệnh của mình một cách liên tục như trước đây nữa, nhưng những “Anna, Latte, Jolie, Anthony” vẫn sẽ là những người bạn đồng hành cùng mọi người trên những hướng đi mới, nơi từng cá nhân vẫn sẽ không ngừng góp nhặt những dòng văn thơ nhỏ bé kia và biến nó trở thành những “giấc mơ lớn” của tất cả chúng ta.
Người ta dạo này hay nói về “Kỷ nguyên vươn mình” - ở đây chúng tôi cũng sẽ có “Kỷ nguyên mới”!
Tất nhiên, Tech Blog vẫn sẽ tiếp tục những dòng chảy của mình và mang đến nhiều hơn những pha tấu hài cũng như cà khịa kinh điển hơn nữa, giúp mọi người hiểu hơn về các xu hướng mới của công nghệ hiện nay. Hãy tiếp tục chờ đón tại đây nhé.
Còn bây giờ, đã đến lúc nói lời chào đầu tiên: Xin chào các bạn, mình đã quay trở lại rồi đây!
Tuấn Anh
Phụ lục Phần 1: Thuật toán Luhn
Thuật toán này được một kỹ sư của IBM tên là Hans Peter Luhn tạo ra nhằm mục đích tạo sinh mã định danh cho nhiều loại giấy tờ khác nhau. Thuật toán này đựợc cấp bằng sáng chế số 2.950.048 tại Mỹ vào ngày 23/08/1960, và được đưa vào chuẩn ISO/IEC 7812-1 dùng rộng rãi trong thời điểm hiện nay.
Thuật toán này được sử dụng ở các loại giấy tờ như: Thẻ tín dụng, mã IMEI (định danh điện thoại), số Bảo hiểm xã hội Canada (Gia Nã Đại) và Hy Lạp, số căn cước công dân của Nam Phi, Israel (Do Thái), Thụy Điển, …
- Nguồn: TechTarget
Dưới đây là mã giả của thuật toán này cũng như một số mã nguồn mẫu bằng các ngôn ngữ khác nhau, thu thập từ Wikipedia. Mọi người cũng có thể đọc bài viết này để hiểu thêm cách thuật toán hoạt động.
Mã giả thuật toán
# Pseudo code for the algorithm
function isValid(cardNumber[1..length]) sum := 0 parity := length mod 2 for i from 1 to length do if i mod 2 != parity then sum := sum + cardNumber[i] elseif cardNumber[i] > 4 then sum := sum + 2 * cardNumber[i] - 9 else sum := sum + 2 * cardNumber[i] end if end for return cardNumber[length] == (10 - (sum mod 10))end function
Mã nguồn ngôn ngữ C#
// Csharp version
bool IsValidLuhn(in int[] digits){ int check_digit = 0; for (int i = digits.Length - 2; i >= 0; --i) check_digit += ((i & 1) is 0) switch { true => digits[i] > 4 ? digits[i] * 2 - 9 : digits[i] * 2, false => digits[i] };
return (10 - (check_digit % 10)) % 10 == digits.Last();}
Mã nguồn ngôn ngữ Java
// Java version
public static boolean isValidLuhn(String number) { int n = number.length(); int total = 0; boolean even = true; // iterate from right to left, double every 'even' value for (int i = n - 2; i >= 0; i--) { int digit = number.charAt(i) - '0'; if (digit < 0 || digit > 9) { // value may only contain digits return false; } if (even) { digit <<= 1; // double value } even = !even; total += digit > 9 ? digit - 9 : digit; } int checksum = number.charAt(n - 1) - '0'; return (total + checksum) % 10 == 0;}
Mã nguồn ngôn ngữ TypeScript
// TypeScript version
function luhnCheck(input: number): boolean { const number = input.toString(); const digits = number.replace(/\D/g, '').split('').map(Number); let sum = 0; let isSecond = false; for (let i = digits.length - 1; i >= 0; i--) { let digit = digits[i]; if (isSecond) { digit *= 2; if (digit > 9) { digit -= 9; } } sum += digit; isSecond = !isSecond; } return sum % 10 === 0;}
Mã nguồn ngôn ngữ Python
# Python version
class LuhnAlgorithm: """Class to validate a number using Luhn algorithm.
Args: input_value (str): The input value to validate.
returns: bool: True if the number is valid, False otherwise. """ def __init__(self, input_value: str) -> None: self.input_value = input_value.replace(' ', '')
def last_digit_and_remaining_numbers(self) -> tuple: """ Returns the last digit and the remaining numbers """ return int(self.input_value[-1]), self.input_value[:-1]
def __checksum(self) -> int: last_digit, remaining_numbers = self.last_digit_and_remaining_numbers() nums = [int(num) if idx % 2 != 0 else int(num) * 2 if int(num) * 2 <= 9 \ else int(num) * 2 % 10 + int(num) * 2 // 10 \ for idx, num in enumerate(remaining_numbers)]
return (sum(nums) + last_digit) % 10 == 0
def verify(self) -> bool: """Verify a number using Luhn algorithm.""" return self.__checksum()
Tổng kết bài viết
Vừa rồi là toàn bộ bài đăng số 5 của series Tech Blog. Mời quý độc giả theo dõi các bài đăng tiếp theo và đóng góp ý kiến cũng trên website này. Trân trọng cảm ơn và kính chào 👋.