จากบทความคราวที่แล้ว ที่เราเขียนเพื่อตอบคำถามว่า เราสามารถเขียน QR code ด้วยมือได้หรือไม่ เราก็รู้คำตอบกันไปแล้ว คราวนี้อยากจะมาเล่าเพิ่มเติม เผื่อใครสงสัยว่า QR code ทำงานยังไงแบบละเอียดยิ่งขึ้น บทความนี้จะเขียนเจาะลึกลงไปในด้านเทคนิคมากขึ้น ถ้าไม่เข้าใจตรงไหนก็ Google เอา ไม่ก็ส่งเมลล์มาถามได้นะจ๊ะ

QR code ทำงานยังไง

ก่อนอื่นต้องเล่าก่อนว่า QR code มีหลาย version ตั้งแต่ 1 ถึง 40 แต่ละ version จะมีขนาด และความจุข้อมูลที่แตกต่างกันไป โดยจำนวนของ dot หรือสี่เหลี่ยมจัตุรัส ในแต่ละด้านของ QR code จะเท่ากับ (4 × version number) + 17 เช่น QR Code version 1 จะมีขนาด 21 x 21 dot คือในแนวนอนและแนวตั้ง จะประกอบไปด้วยสี่เหลี่ยมจัตุรัสด้านละ 21 ช่อง

ตัวแปรหลักอีกอันนึงก็คือ Error Correction Level มันคือตัวที่บอกว่า ถ้า QR code ฉีกขาด หรือเสียหายไปบางส่วน เราจะสามารถกู้ข้อมูลกลับมาได้มากน้อยแค่ไหน โดยแบ่งออกเป็น 4 level ได้แก่ L (Low), M (Medium), Q (Quartile) และ H (High) โดยสามารถกู้ข้อมูลคืนมาได้ 7%, 15%, 25% และ 30% ตามลำดับ จะเห็นได้ว่ายิ่ง level สูงก็จะยิ่งกู้ข้อมูลกลับมาได้มาก แต่ก็จะยิ่งทำให้พื้นที่สำหรับเก็บข้อมูลน้อยลงเหมือนกัน นอกจากนี้ error correction ก็ช่วยให้เราสามารถตกแต่ง QR code โดยเอา logo หรือรูปของ brand เข้ามาแปะใน QR code โดยไม่กระทบกับข้อมูลได้ด้วย

 

 

 

 

 

 

หน่วยย่อยที่สุดใน QR code เรียกว่า bit มันคือ สี่เหลี่ยมสีขาวดำ ที่ใช้แทนค่าเลข 0 และ 1 ใน ระบบ binary ต่อไปเรามาดูข้อมูลส่วนต่างๆใน QR code กัน จากรูปด้านล่างจะประกอบไปด้วยข้อมูลดังนี้

 

พื้นที่สีแดง เป็น position mark จะอยู่ที่มุม 3 มุมของ QR เสมอ ใช้ระบุตำแน่งขอบ และการจัดวางของ QR เวลาที่เราแสกน QR กลับหัว จะได้สามารถถอดข้อมูลออกมาได้

พื้นที่สีส้ม เป็น timming pattern ที่จะเป็นลายสลับขาว-ดำ เชื่อมระหว่าง position mask เสมอ มีเพื่อเวลาแสกนจะได้สามารถ detect row กับ column ของข้อมูลได้ง่าย

พื้นที่สีชมพู เป็น alignment mark ช่วยระบุตำแหน่งการจัดวาง เหมือนกับ position mask จะมีใน QR ขนาด 25×25 dot ขึ้นไป และใน ขนาดที่ใหญ่มากๆ จะมีส่วนนี้หลายจุดมากขึ้น

พื้นที่สีเทา เป็นส่วนที่บอก version ของ QR นั้น

พื้นที่สีน้ำเงิน เป็นข้อมูลเกี่ยวกับ format ประกอบไปด้วยข้อมูล error correction level, format error correction และ mask pattern ตามรูปข้างล่างนี้

mask pattern จะถูกเอามา map ลงบนข้อมูล ตอนถอดรหัส และเข้ารหัส เพื่อป้องกันไม่ให้มีส่วนของข้อมูลที่เป็นสีขาวหรือดำติดต่อกันมากเกินไป ป้องกันปัญหาเวลาอ่านข้อมูล

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

ซึ่งในแต่ละบล็อกการจัดเรียงของ bit จะเป็น zigzag เหมือตามฝั่งขวาของรูปด้านบน ถ้าอยากถอดรหัสก็ต้องเอา mask pattern จากด้านบนมา map บนข้อมูลก่อน แบบนี้แล้วค่อยถอดรหัสต่อ

 

ชุดของข้อมูลจะเริ่มที่ Encoding Mode เสมอ ซึ่งมีขนาด 4 bit เป็นตัวบอกว่า จะต้องอ่านข้อมูลทีละกี่ bit เพื่อเอามาแปลงเป็น 1 character ตามนี้

0001 Numeric (10 bits)
0010 Alphanumeric (9 bits) (เก็บได้แค่อักษรภาษาอังกฤษตัวใหญ่ เลข และสัญลักษณ์พื้นฐานของ url website)
0100 8-bit Byte (8 bits)
1000 Kanji (13 bits)

ต่อมาคือข้อมูลความยาวของข้อความหลัก โดย QR แต่ละ version จะใช้จำนวน bit ต่างกัน ดังนี้

 

ต่อจากนั้นก็จะป็นข้อมูลจริงๆที่ถูกเข้ารหัสไว้ จนเมื่อจบข้อมูลก็จะมี bit 4 bit ที่เป็น 0000 เพื่อบอกว่าข้อมูลจบแล้ว และต่อด้วย error correction ของข้อมูล ซึ่งเป็นส่วนที่เอาข้อมูลมาหลักมาเข้ารหัสด้วยอัลกอลิทึม Reed-Solomon เพื่อสำรองเผื่อ QR code เสียหาย

จากที่อ่านกันมา (ถ้าเข้าใจอ่านะ) ทุกคนคงรู้แล้วว่าเราสามารถอ่าน QR code ได้ด้วยตาเปล่า (ถ้ามีความพยายาม และเวลามากพอ) ถ้าใครสนใจก็ลองดูตามคลิปนี้ได้ https://www.youtube.com/watch?v=KA8hDldvfv0

 

ที่มา:

https://www.quora.com/How-do-QR-codes-work

https://en.wikipedia.org/wiki/QR_code

Facebook Comments
คุมสีโทน Blogger

คุมโทนตาม Blogger #สายเที่ยว

BiketoWork สิ่งที่ผมได้เรียนรู้ จากการปั่นจักรยานไปทำงาน 66วัน

New powerful gear in marketing: Influencer marketing.Use wisely!