เจาะลึกคิวอาร์โค้ดชำระเงินมาตรฐานยุโรป แท้จริงแล้วเป็นเพียงข้อความ 12 บรรทัด
ผู้พัฒนาเว็บไซต์ ibanchecker.cash เผยเบื้องหลังการสร้างและถอดรหัส QR โค้ดชำระเงินตามมาตรฐาน EPC069-12 ซึ่งเรียบง่ายกว่าที่คิดโดยใช้เพียงข้อความธรรมดา

ภาพประกอบจากคลังภาพสต็อก ไม่ใช่ภาพจากเหตุการณ์จริง
- มาตรฐาน EPC069-12 ใช้ข้อความธรรมดา 12 บรรทัดโดยไม่มี JSON หรือไบนารี
- ขนาดข้อมูลทั้งหมดต้องไม่เกิน 331 ไบต์ และรองรับสกุลเงินยูโรเท่านั้น
- เครื่องมือถอดรหัสทำงานบนเบราว์เซอร์ทั้งหมดผ่าน jsQR โดยไม่มีการอัปโหลดภาพ
หากคุณเคยชำระเงินด้วยใบแจ้งหนี้ในทวีปยุโรปช่วงนี้ คงคุ้นเคยกับการเปิดแอปพลิเคชันธนาคารส่องไปที่สี่เหลี่ยมเล็กๆ เพื่อดึงข้อมูลผู้รับเงิน เลข IBAN และยอดเงินอัตโนมัติ Koray Köylü ผู้พัฒนาเว็บไซต์ ibanchecker.cash ได้ใช้เวลาหลายสัปดาห์ในการพัฒนาทั้งฝั่งสร้างและฝั่งอ่านโค้ดเหล่านี้ จนพบว่ารูปแบบมาตรฐานมีความเรียบง่ายกว่าที่หลายคนคาดคิด
มาตรฐานดังกล่าวคือ EPC069-12 ซึ่งเผยแพร่โดยสภาการชำระเงินแห่งยุโรป (European Payments Council) หรือที่ธนาคารในเยอรมนีเรียกว่า GiroCode ข้อมูลภายในไม่ใช่ไฟล์ไบนารีหรือ JSON แต่เป็นข้อความธรรมดาที่แบ่งเป็น 12 องค์ประกอบคั่นด้วยขึ้นบรรทัดใหม่ ดังตัวอย่างข้อความ:
- 1. Service tag: BCD
- 2. Version: 002 (ทำให้ BIC เป็นทางเลือก)
- 3. Character set: 1 หมายถึง UTF-8
- 4. Identification: SCT (SEPA Credit Transfer)
- 5. BIC: COBADEFF
- 6. Beneficiary name: ชื่อผู้รับเงิน
- 7. IBAN: เลขบัญชีธนาคาร
- 8. Amount: สกุลเงินติดกับตัวเลข
- 9. Purpose: เว้นว่าง
- 10. Structured reference: เว้นว่าง
- 11. Unstructured reference: ข้อความอิสระ
- 12. Beneficiary to originator: อาจไม่มีก็ได้
ข้อจำกัดที่ควรทราบก่อนนำไปใช้งานคือ เพย์โหลดทั้งหมดต้องมีขนาดไม่เกิน 331 ไบต์ ชื่อจำกัดไว้ที่ 70 ตัวอักษร และข้อมูลอ้างอิงไม่เกิน 140 ตัวอักษร รองรับเฉพาะสกุลเงินยูโรตั้งแต่ 0.01 ถึง 999,999,999.99 ยูโรเท่านั้น การแก้ไขข้อผิดพลาดต้องอยู่ที่ระดับ M และไม่มีลายเซ็นดิจิทัลยืนยันผู้สร้าง ซึ่งเป็นจุดที่ควรระวังเมื่อพบสติกเกอร์ QR ตามมิเตอร์จอดรถ

ภาพประกอบจากคลังภาพสต็อก ไม่ใช่ภาพจากเหตุการณ์จริง
ในบรรทัดที่ 6 ซึ่งเป็นชื่อผู้รับเงินหรือเจ้าของบัญชี เกิดข้อผิดพลาดขึ้นในเวอร์ชันแรกของเครื่องมือที่ใส่ชื่อธนาคารแทน ทำให้แอปธนาคารแสดงผลชื่อ Commerzbank แทนที่จะเป็นชื่อบุคคลจริง Köylü ย้ำเตือนว่าบรรทัดนี้ต้องเป็นผู้รับเงินเท่านั้น ห้ามใส่ชื่อธนาคารเด็ดขาด แม้ตัวแปรชื่อธนาคารจะหาได้ง่ายจากการแปลงเลข IBAN ก็ตาม
"A payment QR code is just twelve lines of text"
Koray Köylü
มาตรฐาน SEPA Credit Transfer (SCT) ถือเป็นกลไกสำคัญในการทำธุรกรรมข้ามพรมแดนภายในสหภาพยุโรป การที่มาตรฐานคิวอาร์โค้ดถูกออกแบบให้อยู่ในรูปข้อความเพลนเท็กซ์ธรรมดา 12 บรรทัด ช่วยให้นักพัฒนาสามารถสร้างเครื่องมือถอดและประกอบรหัสได้ง่ายโดยไม่ต้องพึ่งพาไลบรารีซับซ้อน ทว่าในมุมมองด้านความปลอดภัย การไม่มีลายเซ็นดิจิทัลกำกับก็เปิดช่องให้เกิดความเสี่ยงในการแปะคิวอาร์โค้ดปลอมตามสถานที่สาธารณะได้เช่นกัน
สำหรับเครื่องมือสร้างโค้ดรุ่นใหม่จะอัปเดตภาพแบบเรียลไทม์ขณะพิมพ์ พร้อมแสดงเคาน์เตอร์ไบต์ขยับเข้าใกล้ขีดจำกัด 331 ไบต์ การส่งออกไฟล์รองรับทั้ง SVG, PNG ความละเอียดสูง และเวกเตอร์ PDF โดยสร้างไฟล์ PDF ขึ้นเองจากการเดินเส้นทาง SVG แบบไร้การพึ่งพาไลบรารีภายนอก ส่วนการถอดรหัสสามารถอัปโหลดภาพและตรวจสอบองค์ประกอบทั้ง 12 ส่วนได้ทันทีในเบราว์เซอร์ผ่านไลบรารี jsQR โดยภาพจะไม่ถูกอัปโหลดขึ้นเซิร์ฟเวอร์แต่อย่างใด
ที่มา: Dev.to
พบข้อมูลผิดพลาดในบทความนี้? แจ้งปัญหาบทความนี้
ความคิดเห็น
แสดงความคิดเห็น