หลักการทำงานของ Checksum
หมายเลขบัตร หมายเลข IBAN หมายเลขประจำตัวผู้เสียภาษี และที่อยู่คริปโทเคอร์เรนซีต่างๆ ล้วนมีตัวเลขเพิ่มเติมซ่อนอยู่หนึ่งหรือสองตัวที่คำนวณมาจากตัวเลขอื่นๆ หากพิมพ์ผิดเพียงตัวเดียว การคำนวณก็จะไม่สมดุล — นี่คือเหตุผลที่ Validator สามารถระบุข้อผิดพลาดได้ทันทีโดยไม่ต้องเชื่อมต่อออนไลน์ และไม่ต้องขอข้อมูลจากธนาคารหรือบล็อกเชนเลย
Checksum คืออะไร
Checksum (หรือ ตัวเลขตรวจสอบ) เป็นการเพิ่มข้อมูลซ้ำเข้าไปโดยเจตนา เมื่อมีการออกหมายเลข ตัวเลขหนึ่งหรือหลายตัวจะไม่ได้ถูกเลือกมาโดยอิสระ: แต่จะถูกคำนวณมาจากตัวเลขที่เหลือตามสูตรที่กำหนดไว้ ใครก็ตามที่รู้สูตรนี้จะสามารถคำนวณตัวเลขเหล่านั้นใหม่และนำมาเปรียบเทียบกันได้ หากตรงกัน แสดงว่าหมายเลขนั้นมีความสอดคล้องกันภายใน หากไม่ตรงกัน แสดงว่ามีการพิมพ์ผิด อ่านผิด หรือข้อมูลเกิดความเสียหาย
นั่นคือทั้งหมดที่ Checksum สามารถรับประกันได้ มันไม่ได้บอกอะไรเกี่ยวกับการที่บัญชีนั้นมีอยู่จริงหรือไม่ ใครเป็นเจ้าของ หรือมีอะไรอยู่ในบัญชี — ซึ่งเป็นประเด็นที่ Validator ทุกคนในเว็บไซต์นี้เน้นย้ำเสมอ เพราะสองสิ่งนี้มักถูกเข้าใจผิดกันได้ง่าย
ตัวอย่างประกอบที่ 1 — Luhn อัลกอริทึมสำหรับหมายเลขบัตร
Visa, Mastercard และบัตรชำระเงินอื่นๆ ส่วนใหญ่ใช้ระบบ Luhn ลองดูตัวอย่างคลาสสิก 7992 7398 713 เริ่มจากตัวเลขทางด้านขวาสุด ให้คูณตัวเลขทุกตัวที่อยู่ในตำแหน่งคี่ด้วย 2; หากผลลัพธ์เป็นเลขสองหลัก ให้นำเลขทั้งสองตัวมารวมกัน จากนั้นนำผลรวมทั้งหมดมารวมกันอีกครั้ง
| ตัวเลข | ตำแหน่งนับจากขวา | คูณสองหรือไม่? | นับเป็น |
|---|---|---|---|
3 | เลขตรวจสอบ | — | 3 |
1 | ตัวที่ 2 จากขวา | 1 × 2 = 2 | 2 |
7 | ตัวที่ 3 | — | 7 |
8 | ตัวที่ 4 | 8 × 2 = 16 → 1 + 6 | 7 |
9 | ตัวที่ 5 | — | 9 |
3 | ตัวที่ 6 | 3 × 2 = 6 | 6 |
7 | ตัวที่ 7 | — | 7 |
2 | ตัวที่ 8 | 2 × 2 = 4 | 4 |
9 | ตัวที่ 9 | — | 9 |
9 | ตัวที่ 10 | 9 × 2 = 18 → 1 + 8 | 9 |
7 | ลำดับที่ 11 | — | 7 |
คอลัมน์ด้านขวามีผลรวมเท่ากับ 3 + 2 + 7 + 7 + 9 + 6 + 7 + 4 + 9 + 9 + 7 = 70 เลขเจ็ดสิบสามารถหารด้วยสิบได้ลงตัว ดังนั้นหมายเลขนี้จึงถูกต้อง หากเปลี่ยนเลขหลักใดหลักหนึ่ง ผลรวมจะไม่เป็นจำนวนที่หารด้วยสิบลงตัว ลองใช้เครื่องมือ ตัวตรวจสอบบัตรเครดิต ดู — เครื่องมือนี้จะทำการคำนวณแบบเดียวกันนี้บนอุปกรณ์ของคุณ
ตัวอย่างการคำนวณที่ 2 — การหาผลรวมแบบมีน้ำหนัก (ISBN-10)
หมายเลขประจำตัวประชาชนของหลายประเทศใช้ระบบ ผลรวมน้ำหนัก: คือการนำเลขแต่ละหลักมาคูณกับน้ำหนักที่กำหนด จากนั้นนำผลรวมมาตรวจสอบเศษที่เหลือ ISBN-10 เป็นตัวอย่างที่ชัดเจนที่สุด สำหรับหมายเลข 0-306-40615-2 น้ำหนักจะเริ่มจาก 10 ลงมาจนถึง 1:
0×10 + 3×9 + 0×8 + 6×7 + 4×6 + 0×5 + 6×4 + 1×3 + 5×2 + 2×1 = 132
132 เท่ากับ 11 × 12 พอดี ดังนั้นเศษที่เหลือเมื่อหารด้วย 11 จึงเป็นศูนย์ และหมายเลข ISBN ก็ถูกต้อง หมายเลข CPF ของบราซิล หมายเลข PESEL ของโปแลนด์ และหมายเลขประจำตัวอื่นอีกหลายสิบชนิดต่างก็ใช้รูปแบบเดียวกันนี้พร้อมน้ำหนักและค่า modulus ที่แตกต่างกัน — นี่จึงเป็นเหตุผลที่เครื่องมือ ตัวตรวจสอบ ID แบบกลุ่ม สามารถตรวจสอบหมายเลขเหล่านี้ได้หลายพันรายการในเวลาเพียงหนึ่งวินาที
ตัวอย่างการคำนวณที่ 3 — IBAN และ mod 97
หมายเลขบัญชีธนาคารระหว่างประเทศใช้มาตรฐาน ISO 7064 mod 97-10 ซึ่งเป็นระบบที่มีความแข็งแกร่งกว่าและมีเลขตรวจสอบสองหลัก ลองดูตัวอย่างมาตรฐาน GB82 WEST 1234 5698 7654 32:
- ตรวจสอบความยาวตามประเทศ: หมายเลข IBAN ของสหราชอาณาจักรมี 22 ตัวอักษร. ✓
- นำตัวอักษร 4 ตัวแรกไปไว้ท้าย:
WEST12345698765432GB82. - แทนที่ตัวอักษรแต่ละตัวด้วยเลขสองหลัก (A = 10 … Z = 35): W→32, E→14, S→28, T→29, G→16, B→11 ทำให้ได้
3214282912345698765432161182. - นำตัวเลขนั้นมาหารด้วย 97 เศษที่เหลือจะต้องเท่ากับ 1 พอดี — และก็เป็นเช่นนั้นจริง
เนื่องจาก 97 เป็นจำนวนเฉพาะและมีค่ามากกว่าการสลับตัวเลขสองหลักใดๆ ระบบ mod 97 จึงสามารถตรวจจับข้อผิดพลาดของตัวอักษรเดี่ยวและการสลับตำแหน่งได้ทุกกรณี มีเพียงหนึ่งใน 97 สตริงแบบสุ่มเท่านั้นที่จะผ่านการตรวจสอบโดยบังเอิญ เครื่องมือ เครื่องมือตรวจสอบ IBAN จะแสดงให้เห็นว่าขั้นตอนแต่ละขั้นผ่านหรือไม่ผ่าน
ที่อยู่คริปโต: ตรวจสอบความถูกต้องที่สร้างจากแฮช
ที่อยู่บิตคอยน์และอีเธอร์เรียมมีความซับซ้อนสูง เพราะหากมีข้อผิดพลาดเพียงตัวเดียว จะทำให้เงินถูกส่งไปยังที่อยู่ที่ไม่มีตัวตนอย่างถาวร ที่อยู่บิตคอยน์รุ่นเก่า (1…, 3…) ใช้ Base58Check: ข้อมูลที่อยู่จะถูกประมวลผลด้วย SHA-256 สองครั้ง แล้วนำสี่ไบต์แรกของผลลัพธ์มาเป็นตรวจสอบความถูกต้อง การที่ตัวอักษรผิดเพียงตัวเดียวก็จะเปลี่ยนแฮชไปโดยสิ้นเชิง ดังนั้นโอกาสที่ข้อผิดพลาดจะหลุดรอดไปได้จึงอยู่ที่ประมาณหนึ่งในสี่พันล้าน ที่อยู่รูปแบบใหม่ bc1… ใช้ Bech32 หรือ Bech32m ซึ่งเป็นรหัสแก้ไขข้อผิดพลาดที่สามารถตรวจจับความผิดพลาดที่เกี่ยวข้องกับตัวอักษรได้ถึงสี่ตัว ส่วน EIP-55 ของอีเธอร์เรียมจะซ่อนตรวจสอบความถูกต้องไว้ในรูปแบบการใช้ตัวอักษรตัวใหญ่และตัวเล็ก
เครื่องมือ ตัวตรวจสอบที่อยู่บิตคอยน์ และ ตัวตรวจสอบที่อยู่ Ethereum จะนำอัลกอริทึมเหล่านี้มาใช้งานในเบราว์เซอร์ และทำการตรวจสอบความถูกต้องกับชุดข้อมูลทดสอบอย่างเป็นทางการทุกครั้งที่โหลดหน้าเว็บ
ภาพรวมของระบบต่างๆ
| ระบบ | ใช้งานโดย | ตรวจจับได้ | โอกาสที่ข้อผิดพลาดแบบสุ่มจะหลุดรอดไปได้ |
|---|---|---|---|
| วิธี Luhn (mod 10) | บัตรเครดิตและเดบิต, IMEI, หมายเลขประจำตัวประชาชนหลายประเภท | ตรวจจับข้อผิดพลาดของตัวเลขแต่ละตัวและการสลับตัวอักษรที่อยู่ติดกันส่วนใหญ่ได้ | ประมาณ 1 ใน 10 |
| ISO 7064 mod 97-10 | IBAN และหมายเลขภาษีและบริษัทบางประเภท | ข้อผิดพลาดแต่ละรายการและการสลับตำแหน่งทุกกรณี | ประมาณ 1 ใน 97 |
| ผลรวมแบบมีน้ำหนัก mod 10 หรือ 11 | ISBN-10, หมายเลข CPF ของบราซิล, หมายเลข PESEL ของโปแลนด์ และบัตรประจำตัวหลายประเภท | ข้อผิดพลาดเดี่ยวและการสลับตำแหน่งส่วนใหญ่ | ประมาณ 1 ใน 10 หรือ 1 ใน 11 |
| Base58Check (SHA-256 คู่, 4 ไบต์) | ที่อยู่ Bitcoin รุ่นเก่า (1…, 3…) | ข้อผิดพลาดในการพิมพ์ใดๆ ก็ตาม มีความเป็นไปได้สูงมาก | ประมาณ 1 ใน 4 พันล้าน |
| Bech32 / Bech32m (รหัส BCH) | ที่อยู่ Bitcoin SegWit และ Taproot (bc1…) | รับประกัน: ข้อผิดพลาดใดๆ จะกระทบตัวอักษรไม่เกิน 4 ตัว | น้อยกว่า 1 ในหนึ่งพันล้าน |
| EIP-55 (การจัดรูปแบบ keccak-256) | ที่อยู่ Ethereum | ข้อผิดพลาดจากการพิมพ์ผิด ผ่านรูปแบบตัวอักษรตัวใหญ่และตัวเล็ก | มีโอกาสเกิดขึ้นต่ำมากสำหรับข้อมูลที่ใช้ตัวอักษรทั้งตัวใหญ่และตัวเล็กผสมกัน |
เหตุใดเครื่องมือตรวจสอบจึงควรทำงานบนอุปกรณ์ของคุณ
สิ่งที่กล่าวมาข้างต้นคือการคำนวณทางคณิตศาสตร์กับตัวเลขที่คุณมีอยู่แล้ว ไม่มีเหตุผลใดที่เครื่องมือตรวจสอบจะต้องส่งหมายเลขบัตร หมายเลขประจำตัวภาษี หรือที่อยู่กระเป๋าเงินไปยังเซิร์ฟเวอร์ — และยังมีเหตุผลดีมากที่จะไม่ทำเช่นนั้น เครื่องมือตรวจสอบทุกตัวบนเว็บไซต์นี้จะทำงานในเครื่องของคุณเอง; รายการ เครื่องมือออฟไลน์ ได้จัดกลุ่มเครื่องมือเหล่านี้ไว้ และ คู่มือการตรวจสอบว่ามีการอัปโหลดข้อมูลของคุณหรือไม่ ของเราจะแสดงวิธียืนยันเรื่องนี้สำหรับเว็บไซต์ใดก็ได้ภายในยี่สิบวินาที.
คำถามที่พบบ่อย
การมี checksum ที่ถูกต้องหมายความว่าตัวเลขนั้นเป็นของจริงหรือใช้งานได้จริงหรือไม่?
ไม่ใช่ การมี checksum ถูกต้องเพียงแสดงให้เห็นว่าตัวเลขมีความสอดคล้องกันภายในเท่านั้น — คือตัวเลขนั้นอาจมีอยู่จริงได้ แต่ไม่สามารถบอกคุณได้ว่าบัญชีนั้นเปิดใช้งานอยู่หรือไม่ ใครเป็นเจ้าของ หรือยอดคงเหลือเท่าไร เครื่องมือตรวจสอบทุกตัวบนเว็บไซต์นี้ระบุข้อความนี้ไว้ในหน้าเว็บ เพราะความแตกต่างดังกล่าวมีความสำคัญ
มีโอกาสแค่ไหนที่ตัวเลขผิดจะยังผ่านการตรวจสอบ?
ขึ้นอยู่กับรูปแบบการตรวจสอบ ตัวเลขตรวจสอบแบบ mod-10 เพียงตัวเดียวจะปล่อยให้ข้อผิดพลาดแบบสุ่มประมาณ 1 ใน 10 ผ่านไปได้; รูปแบบ IBAN ที่ใช้ mod 97 จะปล่อยให้ประมาณ 1 ใน 97 ผ่านไปได้; ตัวเลขตรวจสอบ Base58Check ขนาด 4 ไบต์จะปล่อยให้ประมาณ 1 ใน 4 พันล้านผ่านไปได้ คุณสมบัติสำคัญคือข้อผิดพลาดที่มนุษย์มักทำ เช่น การใส่ตัวเลขผิดหรือสลับตัวเลขกัน จะถูกตรวจจับได้ทั้งหมด
ทำไมตัวระบุบางชนิดถึงไม่มีตัวเลขตรวจสอบเลย?
รูปแบบเก่าๆ หรือรูปแบบที่เรียบง่ายกว่าถูกออกแบบมาเพื่อให้ค้นหาข้อมูลจากทะเบียนแทนที่จะตรวจสอบแบบออฟไลน์ และระบบการกำหนดหมายเลขบางระบบก็มีมาก่อนที่จะมีการใช้ตัวเลขตรวจสอบ สำหรับกรณีเหล่านี้ ตัวตรวจสอบจะสามารถตรวจสอบความยาวและรูปแบบของข้อมูลได้เท่านั้น
การนำหมายเลขบัตรหรือหมายเลขบัตรประจำตัวไปวางในตัวตรวจสอบจะปลอดภัยหรือไม่?
จะปลอดภัยก็ต่อเมื่อการตรวจสอบดำเนินการบนอุปกรณ์ของคุณเอง ตัวเลขตรวจสอบเป็นการคำนวณจากตัวเลขที่คุณมีอยู่แล้ว ดังนั้นจึงไม่มีเหตุผลที่ชอบธรรมให้ตัวตรวจสอบส่งข้อมูลเหล่านั้นไปยังเซิร์ฟเวอร์ คุณสามารถยืนยันได้ว่ากรรมวิธีทำงานในเครื่องโดยใช้การทดสอบโหมดเครื่องบินตามที่อธิบายไว้ในคู่มือของเราเพื่อตรวจสอบว่ากรรมวิธีดังกล่าวอัปโหลดข้อมูลของคุณหรือไม่
ความแตกต่างระหว่างตัวเลขตรวจสอบ ฮาช และการเข้ารหัสคืออะไร?
ตัวเลขตรวจสอบคือตัวเลขสั้นๆ ที่ออกแบบมาเพื่อตรวจจับข้อผิดพลาดจากการพิมพ์โดยไม่ตั้งใจ ฮาชทางคริปโตคือลายนิ้วมือขนาดยาวที่ออกแบบมาให้สามารถตรวจจับการเปลี่ยนแปลงที่เกิดขึ้นโดยเจตนาได้ และไม่สามารถกู้คืนข้อมูลต้นฉบับได้ การเข้ารหัสจะเปลี่ยนรูปแบบข้อมูลให้สามารถอ่านได้เฉพาะเมื่อมีกุญแจเท่านั้น Base58Check ใช้ฮาชในการสร้างตัวเลขตรวจสอบ จึงทำให้ยากต่อการหลอกลวงโดยไม่ได้ตั้งใจ