บทความทั้งหมด

อัลกอริทึม Luhn: ตรวจสอบความถูกต้องของหมายเลขบัตรอย่างไร

ตัวเลขสุดท้ายของหมายเลขบัตรไม่ได้สุ่มขึ้นมาลอย ๆ แต่เป็นเลขตรวจสอบที่ถูกออกแบบมาเพื่อจับข้อผิดพลาดที่มักเกิดขึ้นเวลาพิมพ์หมายเลขยาว ๆ ด้วยมือลงในแบบฟอร์มชำระเงิน

อัลกอริทึม Luhn ทำงานอย่างไร

อัลกอริทึมนี้จะไล่อ่านตัวเลขจากขวาไปซ้าย คูณสองในทุกหลักที่สอง แล้วลบ 9 ออกหากผลลัพธ์เกิน 9 ถ้าหมายเลขถูกป้อนอย่างถูกต้อง ผลรวมของตัวเลขทั้งหมดที่ได้จะหารด้วย 10 ลงตัวพอดี

สิ่งประดิษฐ์ของ IBM ในยุค 1950 ไม่ใช่ของ Visa หรือ Mastercard

อัลกอริทึมนี้ตั้งชื่อตาม Hans Peter Luhn นักวิทยาศาสตร์ของ IBM ผู้จดสิทธิบัตรไว้ในปี 1954 ในฐานะวิธีการทั่วไปสำหรับตรวจจับข้อผิดพลาดในการคัดลอกตัวเลขชุดใด ๆ ก็ตาม — ตอนแรกไม่ได้เกี่ยวข้องกับบัตรชำระเงินโดยตรงเลย เครือข่ายการชำระเงินนำมาใช้ในภายหลังเพราะคำนวณได้ง่ายและราคาถูก อีกทั้งยังจับข้อผิดพลาดจากการพิมพ์ด้วยมือที่พบบ่อยที่สุดสองแบบได้ คือ พิมพ์ผิดหนึ่งหลัก หรือสลับตำแหน่งสองหลักที่อยู่ติดกัน

ทำไมการผ่านการตรวจสอบ Luhn ไม่ได้แปลว่าบัตรนั้นมีอยู่จริง

การตรวจสอบ Luhn ยืนยันได้เพียงโครงสร้างทางคณิตศาสตร์ของหมายเลขเท่านั้น ไม่ได้ยืนยันว่ามีบัญชีจริงอยู่เบื้องหลัง สามารถสร้างหมายเลขที่ผ่านการตรวจสอบนี้ได้นับล้านโดยไม่มีสักหมายเลขเดียวที่ผูกกับบัตรจริง ดังนั้นการทำธุรกรรมจริงทุกครั้งจึงยังต้องผ่านการยืนยันจากธนาคารผู้ออกบัตรอยู่ดี

ประโยชน์ของสิ่งนี้

  • จับหมายเลขบัตรที่พิมพ์ผิดตั้งแต่ฝั่งไคลเอนต์ ก่อนส่งแบบฟอร์มไปยังเซิร์ฟเวอร์
  • คัดกรองข้อผิดพลาดในการพิมพ์ที่ชัดเจนได้อย่างรวดเร็วเมื่อป้อนหมายเลขยาว ๆ ด้วยมือ
  • เข้าใจขอบเขตว่าการตรวจสอบ Luhn พิสูจน์อะไรได้บ้าง และพิสูจน์อะไรไม่ได้

การระบุเครือข่ายการชำระเงินจากหมายเลขบัตร (BIN)

ตัวเลขไม่กี่หลักแรกของหมายเลขบัตรคือ BIN (Bank Identification Number) ซึ่งบอกเครือข่ายการชำระเงินได้ตั้งแต่ก่อนตรวจสอบ Luhn แบบเต็มรูปแบบ หมายเลข Visa ขึ้นต้นด้วย 4 ส่วน Mastercard ขึ้นต้นด้วยช่วง 51–55 หรือช่วงใหม่กว่าคือ 2221–2720 และ American Express ขึ้นต้นด้วย 34 หรือ 37 ด้วยตัวเลขนำหน้านี้เองที่ทำให้แบบฟอร์มชำระเงินแสดงไอคอนเครือข่ายที่ถูกต้องได้ตั้งแต่ยังพิมพ์หมายเลขไม่เสร็จ

ลองใช้เครื่องมือ