ทุกส่วนด้านล่างนี้ใช้ข้อความที่คุณพิมพ์ด้านบนสด ๆ — เลื่อนลงไปดูว่า QR Code ของคุณถูกสร้างขึ้นทีละชั้น ยังไง (encoder ทั้งหมดเขียนขึ้นเองจากศูนย์ ไม่ได้ใช้ library)
QR ของคุณ — ลองเอามือถืออีกเครื่องมาสแกนดูได้เลย
Section 01 / 06
กายวิภาคของ QR Code
นี่คือ “print proof” ของ QR ตัวคุณเอง — แตะป้ายรอบ ๆ, แตะโมดูลบน QR โดยตรง หรือกดป้ายชื่อด้านล่าง เพื่อดูว่าแต่ละส่วนทำหน้าที่อะไร
Section 02 / 06
ตัวอักษร → บิต
คอมพิวเตอร์ไม่รู้จัก “ตัวอักษร” รู้จักแค่เลข 0 กับ 1 — นี่คือวิธีที่ข้อความของคุณถูกแปลงเป็นบิต ก่อนจะกลายเป็น QR
ตัวอักษรไทย (และอีโมจิ/สัญลักษณ์พิเศษ) ใช้ มากกว่า 1 byte ต่อตัว ใน UTF-8 — สังเกตช่องขอบสีฟ้า ด้านล่างที่มีเลขฐานสองซ้อนกันหลายบรรทัด
Section 03 / 06
กันพัง — Reed-Solomon
QR แต่ละใบมีข้อมูล “ซ้ำซ้อน” ฝังไว้ (Reed-Solomon) เพื่อให้อ่านได้แม้บางส่วนเสียหาย ลองปรับระดับ แล้วลากนิ้ว/ลากเมาส์ทับ QR ด้านล่างดูว่าบังได้แค่ไหนก่อนที่ทฤษฎีจะบอกว่าไปไม่รอด
ระดับ M: ใช้ codeword แก้ไขข้อผิดพลาด 26 จากทั้งหมด 70 codeword (data 44)
ลากนิ้ว/เมาส์ทับ QR เพื่อจำลองความเสียหาย
ยังไม่ได้บังเลย — ลองบังนิดหน่อยแล้วเอามือถืออีกเครื่องมาสแกนดู
Section 04 / 06
หน้ากาก (Mask)
ข้อมูลดิบอาจสร้างลายที่กล้องสับสน (เช่น เหมือนจุดค้นหาปลอม หรือมีแถบดำ/ขาวยาว ๆ) เครื่องเข้ารหัสจึงลอง “หน้ากาก” XOR ทับข้อมูล 8 แบบ ให้คะแนนความยุ่งเหยิง (penalty) แล้วเลือกแบบที่คะแนนต่ำสุด
หน้ากาก #0 — คะแนนต่ำสุด ตัวที่ QR จริงเลือกใช้
| กฎการให้คะแนน | คะแนน |
|---|---|
| 1. เส้นสีเดียวติดกันยาว ≥5 | 238 |
| 2. บล็อก 2×2 สีเดียวกัน | 231 |
| 3. ลายคล้ายจุดค้นหาปลอม | 40 |
| 4. สัดส่วนดำ/ขาวไม่สมดุล | 0 |
| รวม | 509 |
Section 05 / 06
Version / ขนาด
ยิ่งข้อความยาว QR ยิ่งต้อง “เวอร์ชัน” สูงขึ้น (มีโมดูลมากขึ้น) — ลองพิมพ์เพิ่มที่ช่องด้านบนแล้วดู แท่งกราฟและ QR ขยับสด ๆ
Section 06 / 06
ข้างใน QR พร้อมเพย์
QR พร้อมเพย์ก็คือ QR Code ธรรมดา ที่ข้อความข้างในเขียนตามมาตรฐาน EMVCo — ลองแกะโครงสร้าง TLV (tag/length/value) ของ QR ตัวอย่าง (เบอร์ปลอม) ด้านล่างดู
QR พร้อมเพย์ตัวอย่าง (DEMO) — ตรวจสอบ CRC: ถูกต้อง ✓
| Tag | ความหมาย | Value |
|---|---|---|
| 00 (len 2) | รูปแบบ Payload (Payload Format Indicator) | 01 |
| 01 (len 2) | วิธีเริ่มรายการ (Point of Initiation Method) | 11 |
| 29 (len 37) | ข้อมูลบัญชีผู้รับเงิน — พร้อมเพย์ (Merchant Account Info) | (ดูรายละเอียดด้านล่าง) |
| ↳ 00 (len 16) | รหัสแอปพลิเคชันพร้อมเพย์ (Application ID) | A000000677010111 |
| ↳ 01 (len 13) | เบอร์โทรศัพท์ผู้รับเงิน (แปลงเป็นรหัสประเทศ 0066) | 0066800000000 |
| 53 (len 3) | รหัสสกุลเงิน (Transaction Currency) | 764 |
| 58 (len 2) | รหัสประเทศ (Country Code) | TH |
| 59 (len 9) | ชื่อร้าน/ผู้รับเงิน (Merchant Name) | DEMO SHOP |
| 60 (len 7) | เมือง (Merchant City) | BANGKOK |
| 63 (len 4) | รหัสตรวจสอบ CRC (CRC Checksum) | CE26 |