
สาระสำคัญ
- QRCode คืออะไร และต่างจาก Barcode ยังไง?
- โครงสร้างของ QR Code: Finder Pattern, Alignment Pattern
- ข้อมูลถูกเก็บใน QR Code ยังไง?
- Error Correction: ทำไม QR Code เสียหายแล้วยังสแกนได้?
- 4 โหมดการเข้ารหัสของ QR Code
TL;DR
QR Code เป็น Barcode แบบ 2 มิติ ที่เก็บข้อมูลได้ทั้งแนวนอนและแนวตั้ง มี Finder Pattern 3 มุมที่มีอัตราส่วน 1:1:3:1:1 ช่วยให้สแกนได้ทุกทิศทาง ข้อมูลถูกเก็บเป็น module (ดำ = 1, ขาว = 0) อ่านแบบ zigzag และมี Error Correction ที่ซ่อมข้อมูลที่เสียหายได้ตั้งแต่ 7-30% ซึ่งนี่คือเหตุผลที่เราสามารถใส่โลโก้ตรงกลาง QR Code ได้!
CodeQuiz EP.27 - QR Code อ่านยังไง?
QR Code คืออะไร?
QR Code (Quick Response Code) เป็นสิ่งที่เราเห็นกันทุกวัน ใช้ตั้งแต่สากเบือ ยันบัตรเลือกตั้ง แต่เคยสงสัยไหมว่า มันอ่านยังไง?

จาก EP.26 เรารู้แล้วว่า Barcode เก็บข้อมูลเป็นแถบดำสลับขาวที่อ่านได้ในแนวนอนเท่านั้น แต่ QR Code เป็น Barcode แบบ 2 มิติ ที่สามารถเก็บข้อมูลได้ทั้งแนวนอนและแนวตั้ง ทำให้เก็บข้อมูลได้มากกว่า Barcode แบบเดิมหลายร้อยเท่า!
QR Code ถูกคิดค้นโดยบริษัท Denso Wave ในประเทศญี่ปุ่นเมื่อปี 1994 สำหรับอุตสาหกรรมรถยนต์ แต่ตอนนี้เราเห็น QR Code อยู่ทุกที่แล้ว
เรามาดูโครงสร้างของมันกัน
โครงสร้างของ QR Code

QR Code มีส่วนประกอบหลักๆ ดังนี้
Finder Pattern (ตัวระบุตำแหน่ง): สี่เหลี่ยมใหญ่ 3 อันที่อยู่ที่ 3 มุมของ QR Code ทำหน้าที่ช่วยให้เครื่องสแกนรู้ว่า QR Code อยู่ตรงไหนและหันไปทางไหน
ข้อมูลของเรา: พื้นที่ส่วนขาวดำที่ไม่ใช่สี่เหลี่ยมใหญ่ จริงๆ แล้วส่วนนี้ประกอบไปด้วยหลายส่วน ไม่ใช่แค่ข้อมูลอย่างเดียว เช่น ส่วนของการ Encode, Error Correction เป็นต้น
Alignment Pattern (ตัวจัดแนว): สี่เหลี่ยมเล็กๆ ที่ช่วยแก้ไขความบิดเบี้ยวเวลาสแกน โดยเฉพาะใน QR Code ขนาดใหญ่
Finder Pattern ทำไมต้องมี 3 มุม?

Finder Pattern มี 3 มุม เพื่อช่วยให้สแกนได้ทุกมุม ไม่ว่าจะหมุน QR Code ไปมุมไหน เครื่องก็ยังอ่านได้ถูกต้อง
ถ้าเราลองซูมเข้าไปดูสักนิด จะเห็นว่า Finder Pattern แต่ละตัวมีอัตราส่วนความกว้างของแถบ ดำ:ขาว:ดำ:ขาว:ดำ เท่ากับ 1:1:3:1:1 เสมอ ไม่ว่าจะหมุนเท่าไหร่ อัตราส่วนนี้ก็จะเป็น 1:1:3:1:1 เสมอ ทำให้ระบุตำแหน่งและองศาการหมุนได้ง่าย
ถ้าจำจาก EP.26 ได้ นี่ก็คล้ายกับ Stop Character ของ Barcode ที่ช่วยให้สแกนกลับหัวได้นั่นเอง แต่ QR Code ทำได้ดีกว่าเพราะรองรับการหมุนได้ทุกมุม!
ข้อมูลถูกเก็บใน QR Code ยังไง?

ข้อมูลถูกเก็บในส่วนขาวดำที่ไม่ใช่สี่เหลี่ยมนั่นแหละ โดยหลักการง่ายๆ คือ
- ดำ = 1
- ขาว = 0
ถ้าเราลองซูมดู จะเห็นว่าเครื่องสแกนจะเริ่มอ่านจากจุดเริ่มที่มุมล่างขวา แล้วไล่ขึ้นไปข้างบนทีละ 2 column แบบ zigzag สลับทิศทางเมื่อชนขอบ วนไปเรื่อยๆ จนอ่านข้อมูลครบ
ที่น่าสนใจคือ QR Code เสียหายแล้วยังอ่านได้!

จำได้ไหมที่ [EP.26](https://www.th-leaguesofcode.com/blog/how-to-read-barcode) เราพูดถึง Checksum ของ Barcode ที่ช่วยตรวจสอบว่าอ่านถูกหรือเปล่า? QR Code ก็มีระบบคล้ายกัน แต่เก่งกว่ามาก!
ใน QR Code มี Zone ที่เป็นเหมือนตัวซ่อมส่วนที่พัง ซ่อมได้ตั้งแต่ 7-30% เลยทีเดียว แม้โดนปิดไว้ก็ยังสแกนได้ แต่ยิ่งซ่อมได้มาก พื้นที่ QR Code ก็จะยิ่งใหญ่มากขึ้นตามเท่านั้น
Fun fact: นี่คือเหตุผลที่เราสามารถใส่โลโก้ตรงกลาง QR Code ได้โดยที่ยังสแกนได้อยู่ เพราะ Error Correction จะช่วยซ่อมส่วนที่ถูกโลโก้บังไว้นั่นเอง
QR Code มี 4 โหมดในการเข้ารหัส

4 บิตแรกของข้อมูลจะบอกว่าใช้โหมดไหน ซึ่งก็คล้ายกับ Start Code ของ Barcode-128 ที่เราเรียนใน EP.26
Numeric (0001) - ตัวเลข 0-9 เท่านั้น
Alphanumeric (0010) - ตัวเลข + ตัวอักษรพิมพ์ใหญ่ + สัญลักษณ์บางตัว
Byte (0100) - ข้อมูลแบบ ISO 8859-1 (รวม UTF-8)
Kanji (1000) - ตัวอักษรญี่ปุ่น
เช่น ถ้าเราจะเก็บเบอร์โทร "0812345678" ก็จะใช้โหมด Numeric ซึ่งประหยัดพื้นที่ที่สุด แต่ถ้าจะเก็บ URL เช่น "https://www.th-leaguesofcode.com" ก็ต้องใช้โหมด Byte
QR Code เลยเป็นที่นิยม

QR Code เลยเป็นที่นิยมเพราะ อ่านได้ง่าย อ่านได้เร็ว แม้จะไม่ชัดมากก็สแกนได้ เหมาะสุดๆ กับการนำไปใช้ตรวจสอบอะไรสักอย่างแหละเนอะ 🌚🤔...
สรุป
QR Code เป็น Barcode แบบ 2 มิติ ที่เก็บข้อมูลได้มากกว่า Barcode แบบเดิมหลายร้อยเท่า สรุปสิ่งที่เราเรียนรู้ในวันนี้คือ
1. QR Code มี Finder Pattern 3 มุมที่มีอัตราส่วน 1:1:3:1:1 ช่วยให้สแกนได้ทุกทิศทาง
2. ข้อมูลถูกเก็บเป็น module (ดำ = 1, ขาว = 0) อ่านแบบ zigzag จากมุมล่างขวา
3. มี Error Correction ที่ซ่อมข้อมูลเสียหายได้ 7-30% ทำให้ใส่โลโก้ตรงกลางได้
4. มี 4 โหมดเข้ารหัส ได้แก่ Numeric, Alphanumeric, Byte, Kanji
ลองสแกน QR Code รอบตัว แล้วสังเกต Finder Pattern 3 มุมดูนะครับ :)