
สาระสำคัญ
- Barcode คืออะไร?
- วิธีการอ่าน Barcode แบบมาตรฐาน Barcode-128
- Checksum คืออะไร และทำงานยังไง?
- ตัวหยุด (Stop Character) ที่ทำให้สแกนกลับหัวได้
TL;DR
Barcode มาตรฐาน Barcode-128 อ่านโดยการนับความกว้างของแถบดำและขาวสลับกัน แล้วแบ่งกลุ่มทุกๆ 6 ตัวเลขเพื่อแปลงเป็นตัวอักษร โดยมี Checksum ไว้ตรวจสอบความถูกต้อง และมี Stop Character แบบพิเศษที่ทำให้สแกนกลับหัวได้!
CodeQuiz EP.26 - Barcode อ่านยังไง?
Barcode คืออะไร?

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

Barcode จะมีแถบความกว้างที่ไม่เท่ากัน และมีสีขาวและดำ ใช้มาตรฐาน Barcode-128
ซึ่งเราจะอ่านตามความกว้าง ได้ว่า 211214111....
หลักการก็คือ เราจะนับความกว้างของแต่ละแถบ โดยเริ่มจากแถบแรกสุดทางซ้าย ไล่ไปทางขวา สลับกันระหว่างแถบดำและแถบขาว เช่น แถบดำกว้าง 2, แถบขาวกว้าง 1, แถบดำกว้าง 1 ก็จะอ่านได้ว่า 211 ไปเรื่อยๆ
แบ่งกลุ่มตัวเลข

จากนั้นนำมาแบ่งเป็นทุกๆ 6 เลข ซึ่งแต่ละอันก็จะมีความหมายของมันเอง
จาก Barcode ตัวอย่าง เราจะอ่านได้ว่า
- ตัวแรก — ให้ใช้ตัวอักษรเซ็ต B (Start Code B)
- ตัวที่ 3 — ให้ใช้ตัวอักษรเซ็ต C (Switch to Code C)
- ตัวที่ 2 - 10 (ไม่รวมสาม) — ข้อมูลจริงๆ คือ A40853843
- ตัวถัดมา — ตัวตรวจสอบความถูกต้อง (Checksum) คือ 7
- ตัวสุดท้าย — ให้หยุด (Stop Character)
ดังนั้น รหัสจึงเป็น A40853843
มาพูดถึง Checksum หรือตัวตรวจความถูกต้องสักหน่อย

Barcode จะมีตัวที่พยายามตรวจความถูกต้องของการอ่านเสมอ
โดยจะมีวิธีในการเช็คตามโค้ดด้านล่าง:
12345678910code = "A40853843" # code from barcodetotal = 103 # Start Code Achecksum = 7 # checksum from barcodefor idx, character in enumerate(code, 1):val = ord(character) - 32total += idx * valif total % 103 == checksum:print("Pass")else:print("Fail")
หลักการก็คือ เราจะเริ่มจากค่า total เท่ากับ 103 (ค่าของ Start Code B) แล้วนำแต่ละตัวอักษรมาคำนวณโดยเอา ASCII ของตัวอักษรนั้นลบด้วย 32 แล้วคูณกับตำแหน่ง (เริ่มจาก 1) แล้วบวกเข้าไปใน total
สุดท้ายเอา total มา mod 103 ถ้าได้ค่าเท่ากับ checksum ที่อ่านได้จาก Barcode ก็แปลว่าอ่านถูกต้องนั่นเอง
อีกสิ่งที่น่าสนใจคือตัวหยุด
หยุด.... หยุดโดยไม่มีอะไรกั้น 🍊

ตัวหยุดมี 7 แถบที่จบด้วยแถบดำเสมอ ซึ่งช่วยให้ "สามารถสแกนกลับหัวได้!"
นั่นหมายความว่า ไม่ว่าเราจะหันบาร์โค้ดไปทางไหน เครื่องสแกนก็สามารถอ่านได้ถูกต้อง เพราะเครื่องจะดูจากตัวหยุดว่าอยู่ฝั่งไหน แล้วจึงตัดสินใจว่าจะอ่านจากซ้ายไปขวา หรือขวาไปซ้าย
สรุป
ดังนั้นเราจึงอ่าน Barcode ได้ไม่ยากนัก โดยสรุปขั้นตอนคือ
- อ่านความกว้างของแถบดำและขาวสลับกัน
- แบ่งกลุ่มทุกๆ 6 เลข แล้วแปลงเป็นตัวอักษรตามมาตรฐาน Barcode-128
- ตรวจสอบความถูกต้องด้วย Checksum
- ตัวหยุดช่วยให้สแกนได้ทั้งสองทิศทาง
ลองกลับไปอ่านบาร์โค้ดที่บ้านดูนะครับ :)