CodeQuiz EP.27: QRCode อ่านยังไง?

https://storage.googleapis.com/code-leagues/Vetit_teacher_8c72ee627b/Vetit_teacher_8c72ee627b.png

พี่เว เวทิต

เผยแพร่เมื่อ

อัปเดตล่าสุดเมื่อ

CodeQuiz EP.27 - QRCode อ่านยังไง OG

สาระสำคัญ

  • 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) เป็นสิ่งที่เราเห็นกันทุกวัน ใช้ตั้งแต่สากเบือ ยันบัตรเลือกตั้ง แต่เคยสงสัยไหมว่า มันอ่านยังไง?


CodeQuiz EP.27 - QRCode อ่านยังไง 2.png

จาก EP.26 เรารู้แล้วว่า Barcode เก็บข้อมูลเป็นแถบดำสลับขาวที่อ่านได้ในแนวนอนเท่านั้น แต่ QR Code เป็น Barcode แบบ 2 มิติ ที่สามารถเก็บข้อมูลได้ทั้งแนวนอนและแนวตั้ง ทำให้เก็บข้อมูลได้มากกว่า Barcode แบบเดิมหลายร้อยเท่า!


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


เรามาดูโครงสร้างของมันกัน


โครงสร้างของ QR Code


CodeQuiz EP.27 - QRCode อ่านยังไง 3.png

QR Code มีส่วนประกอบหลักๆ ดังนี้


Finder Pattern (ตัวระบุตำแหน่ง): สี่เหลี่ยมใหญ่ 3 อันที่อยู่ที่ 3 มุมของ QR Code ทำหน้าที่ช่วยให้เครื่องสแกนรู้ว่า QR Code อยู่ตรงไหนและหันไปทางไหน


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


Alignment Pattern (ตัวจัดแนว): สี่เหลี่ยมเล็กๆ ที่ช่วยแก้ไขความบิดเบี้ยวเวลาสแกน โดยเฉพาะใน QR Code ขนาดใหญ่


Finder Pattern ทำไมต้องมี 3 มุม?


CodeQuiz EP.27 - QRCode อ่านยังไง 4.png

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 ยังไง?


CodeQuiz EP.27 - QRCode อ่านยังไง 5.png

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


- ดำ = 1

- ขาว = 0


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




ที่น่าสนใจคือ QR Code เสียหายแล้วยังอ่านได้!


CodeQuiz EP.27 - QRCode อ่านยังไง 7.png

จำได้ไหมที่ [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 โหมดในการเข้ารหัส


CodeQuiz EP.27 - QRCode อ่านยังไง 6.png

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 เลยเป็นที่นิยม


CodeQuiz EP.27 - QRCode อ่านยังไง 8.png

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 มุมดูนะครับ :)