เลขหลักสุดท้ายของ Barcode บอกอะไร

เลขหลักสุดท้ายของ Barcode บอกอะไร

แม้ว่าทุกวันนี้เราจะมี QR Code ใช้กันอย่างแพร่หลายแล้ว แต่เวลาซื้อของตามร้านสะดวกซื้อหรือห้าง เราก็ยังเข้ารหัสสินค้าและใช้ Barcode แบบดั้งเดิมกันอยู่

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

ระบบการเข้ารหัสสินค้าที่บ้านเรานิยมใช้กันนั้นเรียกว่า European Article Number หรือ EAN-13 โดยสินค้าหนึ่งอย่างก็จะมี EAN-13 เป็นของตัวเอง

รหัส EAN-13 นั้นมี 13 หลัก โดยแต่ละหลักนั้นสามารถเป็นเลขตั้งแต่ 0 ถึง 9 โดยตัวเลข 3 หลักแรกคือรหัสประเทศ เช่น 885 คือประเทศไทย ตัวเลข 4 หลักถัดมาคือรหัสผู้ผลิต และตัวเลข 5 หลักถัดมาคือรหัสสินค้า รวมเป็น 12 หลัก

ส่วนหลักที่ 13 ซึ่งเป็นสิ่งที่เราจะคุยกันในบทความนี้นั้นเรียกว่า 'หลักตรวจสอบ' ซึ่งคำนวณได้จาก 12 หลักก่อนหน้า ซึ่งเดี๋ยวผมจะอธิบายวิธีคำนวณเลขหลักที่ 13 ที่ว่าก่อน แล้วค่อยกลับมาอธิบายว่าทำไมเค้าถึงกำหนดให้คำนวณมันแบบนั้น

ถ้าเราตั้งชื่อให้เลข 12 หลักแรกของบาร์โค้ดเป็น x1, x2, ..., x12 เลขหลักสุดท้ายซึ่งคือ x13 จะเป็นคำตอบของสมภาคต่อไปนี้

x1 + 3x2 + x3 + 3x4 + x5 + 3x6 + x7 + 3x8 + x9 + 3x10 + x11 + 3x12 + x13 ≡ 0 (mod 10)

พูดเป็นภาษาคนคือ เอาหลักเลขคี่มา เอาหลักเลขคู่คูณสาม จับมาบวกกันทั้งหมด เลขหลักที่ 13 ต้องถูกเลือกมายังไงก็ได้ ที่ทำให้ผลบวกที่ออกมานั้นหารด้วย 10 ลงตัว

เช่น ถ้ารหัส 12 ตัวแรกของ Barcode อันหนึ่งเป็น 885123456789 แทนเลขทั้ง 12 ตัวลงในสูตร จะได้

132 + x13 ≡ 0 (mod 10)

ซึ่งเราต้องเลือก x13 = 8 เพื่อทำให้สมภาคนี้เป็นจริง แสดงว่า Barcode นี้จะถูกแสดงเป็น 8851234567898 นั่นเอง

คำถามคือ ทำไมต้องสร้างให้ยากขนาดนี้ ทำไมต้องคูณสามบ้างไม่คูณบ้าง

คำตอบก็คือ มันถูกสร้างให้สามารถตรวจจับความผิดพลาดในการกรอกหรือการอ่านค่านั้นเอง เพราะสมมติว่ามีหลักหนึ่งผิดไป

เช่นถ้าเครื่องดันอ่าน Barcode ของสินค้ารหัส 8851234567898 ผิดพลาดเป็น 9851234567898 ก็คือตัวแรกผิดไป สิ่งที่เกิดขึ้นคือ เมื่อเราเอาเลขทั้ง 13 จากรหัสสินค้าที่ผิดไปคำนวณตามสูตรตะกี้ ผลลัพธ์ที่ได้จะเท่ากับ 141 ซึ่งหารด้วย 10 ไม่ลงตัวทันที และระบบก็จะฟ้องออกมาว่าต้องมีอะไรสักอย่างผิดพลาด โปรแกรมก็จะแสดงผลให้พนักงานเช็คว่าเครื่องสแกนอาจจะทำงานผิด

ความเจ๋งของระบบนี้ก็คือ มันสามารถตรวจจับความผิดพลาด 1 หลักได้ 100% เลย นั่นคือหากมีความผิดพลาดไปแค่ตำแหน่งเดียว การสร้างรหัสตรวจสอบแบบนี้จะรู้ตัวเสมอและแจ้งพนักงานได้ทันที

แต่ๆๆๆๆ ใครที่เก่งทฤษฎีจำนวนสักหน่อยอาจจะรู้สึกตะงิด ๆ อยู่ในใจว่า แล้วทำไมต้องคูณสามในหลักเลขคู่ด้วยนะ เพราะถ้าเราไม่คูณสาม แล้วใช้สูตรแค่

x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9 + x10 + x11 + x12 + x13 ≡ 0 (mod 10)

มันก็สามารถตรวจจับความผิดพลาด 1 หลักได้ 100% อยู่ดี เพราะการกรอกเลขผิดไปตัวนึงมันก็จะส่งผลให้ผลลัพธ์ที่ออกมาหารด้วย 10 ไม่ลงตัวเช่นกัน

ถ้าอย่างนั้นทำไมต้องคูณสามที่หลักเลขคู่ให้ยุ่งยากด้วยล่ะ

คำตอบก็คือ เพราะว่าความผิดพลาดที่อาจเกิดขึ้นจากการสแกน Barcode ไม่ได้มีแค่การอ่านเลขผิดไปสักหลัก แต่อาจเกิดจากการกรอกข้อมูลหลักที่ติดกันสลับก็ได้ด้วยนี่สิ

เช่นสินค้าที่มีรหัสเป็น 8851234567898 แต่คนกรอกดันกรอกค่าผิดเป็น 8581234567898 นั่นคือดันเผลอกรอกสองหลักแรกสลับกันด้วยความสะเพร่า การสร้างเลขหลักสุดท้ายด้วยวิธีการแบบไม่คูณสามจะไม่รู้ตัวเลยว่ามีอะไรผิดพลาด เพราะไม่ว่าจะเป็น 85 หรือ 58 พอเอามาบวกกันหมดมันก็จะออกมาเท่ากันอยู่ดี

แต่วิธีการสร้างเลขหลักสุดท้ายแบบคูณ 3 หลักเว้นหลักนั้นจะตรวจจับได้

สมมติว่าหลักที่กรอกสลับกันนั้นมีค่าเป็น a กับ b ด้วยความที่เราคูณสามสลับไม่คูณสาม ดังนั้นเราสมมติว่า a ควรจะอยู่ในหลักที่คูณหนึ่ง และ b ควรจะอยู่ในหลักที่คูณสาม เมื่อคำนวณตามสูตรจะได้ว่าเลขผลรวมที่ถูกต้องควรจะเท่ากับ a + 3b + (ที่เหลือ) แต่เมื่อกรอกสลับ จะกลายเป็น 3a + b + (ที่เหลือ) ซึ่งกรณีเดียวที่ระบบตรวจสอบของเราจะพังก็คือผลบวกสองอันนี้ดันหารด้วย 10 แล้วได้เศษเท่ากัน นั่นคือ

a + 3b ≡ 3a + b (mod 10)

ซึ่งคือ

a - b ≡ 5 (mod 10)

หรือแปลว่าผลต่างระหว่างสองหลักที่สลับกันดันเท่ากับ 5 พอดี ถ้าเป็นกรณีอื่น ๆ ระบบก็จะจับได้หมด อย่างการกรอก 885123456789 ผิดเป็น 8581234567898 นั้น ระบบก็จะจับได้อย่างแน่นอน เพราะว่าหลักที่สลับนั้นมีค่าเป็น 8 กับ 5 ซึ่งผลต่างไม่เท่ากับ 5 นั่นเอง

นั่นก็คือ ด้วยการคูณสามแบบหลักเว้นหลักเช่นนี้ จะทำให้ระบบ EAN-13 นั้นสามารถตรวจจับความผิดพลาดได้ถึงสองแบบ นั่นคือการกรอกเลขผิดไปตัวนึง หรือการกรอกเลขตัวที่ติดกันสลับกัน ยกเว้นจะซวยจริง ๆ คือเลขสองตัวที่สลับนั้นดันห่างกัน 5 เช่นกรอก 16 เป็น 61 หรือกรอก 94 เป็น 49 อะไรประมาณนี้

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

อย่างที่ผมพูดเสมอว่า คณิตศาสตร์อยู่ใกล้ตัวเรามากกว่าที่คิด อย่างน้อยทุกครั้งที่คุณได้ยินเสียง ตื้ด จากพนักงานร้านสะดวกซื้อ คณิตศาสตร์ก็กำลังทำงานแล้ว


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

สั่งซื้อหนังได้ที่: https://www.chulabook.com/test-prep/234751
และซื้อแบบ e-book ได้ที่: http://bit.ly/4m6R9tK