คำอธิบาย · พร้อมตัวอย่างการคำนวณ

หลักการทำงานของ Checksum

หมายเลขบัตร หมายเลข IBAN หมายเลขประจำตัวผู้เสียภาษี และที่อยู่คริปโทเคอร์เรนซีต่างๆ ล้วนมีตัวเลขเพิ่มเติมซ่อนอยู่หนึ่งหรือสองตัวที่คำนวณมาจากตัวเลขอื่นๆ หากพิมพ์ผิดเพียงตัวเดียว การคำนวณก็จะไม่สมดุล — นี่คือเหตุผลที่ Validator สามารถระบุข้อผิดพลาดได้ทันทีโดยไม่ต้องเชื่อมต่อออนไลน์ และไม่ต้องขอข้อมูลจากธนาคารหรือบล็อกเชนเลย

Checksum คืออะไร

Checksum (หรือ ตัวเลขตรวจสอบ) เป็นการเพิ่มข้อมูลซ้ำเข้าไปโดยเจตนา เมื่อมีการออกหมายเลข ตัวเลขหนึ่งหรือหลายตัวจะไม่ได้ถูกเลือกมาโดยอิสระ: แต่จะถูกคำนวณมาจากตัวเลขที่เหลือตามสูตรที่กำหนดไว้ ใครก็ตามที่รู้สูตรนี้จะสามารถคำนวณตัวเลขเหล่านั้นใหม่และนำมาเปรียบเทียบกันได้ หากตรงกัน แสดงว่าหมายเลขนั้นมีความสอดคล้องกันภายใน หากไม่ตรงกัน แสดงว่ามีการพิมพ์ผิด อ่านผิด หรือข้อมูลเกิดความเสียหาย

นั่นคือทั้งหมดที่ Checksum สามารถรับประกันได้ มันไม่ได้บอกอะไรเกี่ยวกับการที่บัญชีนั้นมีอยู่จริงหรือไม่ ใครเป็นเจ้าของ หรือมีอะไรอยู่ในบัญชี — ซึ่งเป็นประเด็นที่ Validator ทุกคนในเว็บไซต์นี้เน้นย้ำเสมอ เพราะสองสิ่งนี้มักถูกเข้าใจผิดกันได้ง่าย

ตัวอย่างประกอบที่ 1 — Luhn อัลกอริทึมสำหรับหมายเลขบัตร

Visa, Mastercard และบัตรชำระเงินอื่นๆ ส่วนใหญ่ใช้ระบบ Luhn ลองดูตัวอย่างคลาสสิก 7992 7398 713 เริ่มจากตัวเลขทางด้านขวาสุด ให้คูณตัวเลขทุกตัวที่อยู่ในตำแหน่งคี่ด้วย 2; หากผลลัพธ์เป็นเลขสองหลัก ให้นำเลขทั้งสองตัวมารวมกัน จากนั้นนำผลรวมทั้งหมดมารวมกันอีกครั้ง

ตัวเลขตำแหน่งนับจากขวาคูณสองหรือไม่?นับเป็น
3เลขตรวจสอบ3
1ตัวที่ 2 จากขวา1 × 2 = 22
7ตัวที่ 37
8ตัวที่ 48 × 2 = 16 → 1 + 67
9ตัวที่ 59
3ตัวที่ 63 × 2 = 66
7ตัวที่ 77
2ตัวที่ 82 × 2 = 44
9ตัวที่ 99
9ตัวที่ 109 × 2 = 18 → 1 + 89
7ลำดับที่ 117

คอลัมน์ด้านขวามีผลรวมเท่ากับ 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:

  1. ตรวจสอบความยาวตามประเทศ: หมายเลข IBAN ของสหราชอาณาจักรมี 22 ตัวอักษร. ✓
  2. นำตัวอักษร 4 ตัวแรกไปไว้ท้าย: WEST12345698765432GB82.
  3. แทนที่ตัวอักษรแต่ละตัวด้วยเลขสองหลัก (A = 10 … Z = 35): W→32, E→14, S→28, T→29, G→16, B→11 ทำให้ได้ 3214282912345698765432161182.
  4. นำตัวเลขนั้นมาหารด้วย 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-10IBAN และหมายเลขภาษีและบริษัทบางประเภทข้อผิดพลาดแต่ละรายการและการสลับตำแหน่งทุกกรณีประมาณ 1 ใน 97
ผลรวมแบบมีน้ำหนัก mod 10 หรือ 11ISBN-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 ใช้ฮาชในการสร้างตัวเลขตรวจสอบ จึงทำให้ยากต่อการหลอกลวงโดยไม่ได้ตั้งใจ