สร้าง QR พร้อมเพย์ สำหรับทดสอบระบบ
ใส่เบอร์มือถือ เลขบัตร หรือ e-Wallet ID กับจำนวนเงินถ้ามี แล้วได้ QR พร้อม payload ที่แยกให้ดูทีละฟิลด์ ใช้เทียบกับ QR ที่ระบบสร้าง หรือทดสอบหน้าชำระเงิน
เบอร์มือถือ เลขบัตรประชาชน เลขผู้เสียภาษี หรือ e-Wallet ID ใส่ขีดหรือเว้นวรรคมาก็ได้
เบอร์มือถือ ใส่ในแท็ก 01
QR แบบ static ผู้โอนกรอกยอดเอง
Payload
74 ตัวอักษร00020101021129370016A000000677010111011300660000000005802TH530376463048956
- 00 02
Payload Format Indicator
01
เวอร์ชันของรูปแบบ EMV QR
- 01 02
Point of Initiation Method
11
11 = static ไม่ระบุจำนวนเงิน
- 29 37
Merchant Account Information (พร้อมเพย์)
0016A00000067701011101130066000000000
ข้อมูลผู้รับเงิน มีฟิลด์ย่อยซ้อนอยู่ข้างใน
- 00 16
Application ID ของพร้อมเพย์
A000000677010111
ค่าคงที่ บอกว่าเป็นพร้อมเพย์
- 01 13
เบอร์มือถือ
0066000000000
ตัด 0 ตัวหน้า เติม 66 แล้วเติม 0 ข้างหน้าให้ครบ 13 หลัก
- 58 02
Country Code
TH
รหัสประเทศ
- 53 03
Transaction Currency
764
รหัสเงินบาทตาม ISO 4217
- 63 04
CRC
8956
CRC16 ของทุกตัวอักษรก่อนหน้า รวม 6304 ด้วย
QR สร้างในเบราว์เซอร์นี้ ไม่ได้ส่งเลขไปที่ไหน ใช้ทดสอบระบบเท่านั้น ถ้าลองสแกนด้วยแอปธนาคาร ให้หยุดที่หน้ายืนยัน เพราะเลขที่พิมพ์เล่นอาจเป็นบัญชีของคนจริง
payload ของ QR พร้อมเพย์อ่านยังไง
QR พร้อมเพย์ใช้รูปแบบ EMVCo Merchant Presented Mode ทั้งก้อนเป็นตัวอักษรต่อกันยาว ๆ แต่ละฟิลด์มี 3 ส่วนเรียงกัน
- ID
- เลขฟิลด์ 2 หลัก บอกว่าค่านี้คืออะไร เช่น 54 คือจำนวนเงิน
- ความยาว
- ความยาวของค่า 2 หลัก นับเป็นจำนวนตัวอักษร
- ค่า
- ข้อมูลจริง ฟิลด์ 29 ซ้อนรูปแบบเดียวกันไว้ข้างในอีกชั้น
เช่น 5802TH คือฟิลด์ 58 ยาว 2 ตัว ค่าเป็น TH
ฟิลด์ 01 เป็น 11 เมื่อไม่ระบุยอด ผู้โอนกรอกเอง และเป็น 12 เมื่อมีฟิลด์ 54 แอปธนาคารจะกรอกยอดให้
เบอร์มือถือต้องแปลงก่อน 081-234-5678 กลายเป็น 0066812345678
CRC ปิดท้าย
ฟิลด์สุดท้ายเสมอคือ 6304 ตามด้วย CRC16 เลขฐานสิบหก 4 ตัว คำนวณแบบ CRC-16/CCITT-FALSE คือ polynomial 0x1021 ค่าเริ่ม 0xFFFF จากทุกตัวอักษรก่อนหน้า รวม 6304 ด้วย ถ้า CRC ผิด แอปธนาคารจะไม่ยอมอ่าน QR
function crc16(string $data): string
{
$crc = 0xFFFF;
foreach (str_split($data) as $char) {
$crc ^= ord($char) << 8;
for ($bit = 0; $bit < 8; $bit++) {
$crc = $crc & 0x8000
? (($crc << 1) ^ 0x1021) & 0xFFFF
: ($crc << 1) & 0xFFFF;
}
}
return sprintf('%04X', $crc);
}
crc16('123456789'); // 29B1ลำดับฟิลด์และชุดทดสอบของหน้านี้อ้างอิง dtinth/promptpay-qr payload ที่ได้จึงตรงกับไลบรารีนั้นทุกตัวอักษร
ทดสอบ payload จากระบบ ให้เทียบ CRC 4 ตัวท้ายก่อน
เครื่องมืออื่น
ดูทั้งหมด- สุ่มเลขบัตรประชาชน
เลข 13 หลักที่หลักตรวจสอบถูกตามสูตร ใช้กรอกฟอร์มตอนทดสอบระบบ
- แปลงเลขไทย และจำนวนเงินเป็นคำอ่าน
สลับเลขอารบิกกับเลขไทยทั้งย่อหน้า และเขียนยอดเงินเป็นคำอ่าน ครบทั้งบาท สตางค์ และถ้วน
- สุ่มเลขผู้เสียภาษีนิติบุคคล
เลข 13 หลักของบริษัทและห้างหุ้นส่วนที่หลักตรวจสอบถูกตามสูตร พร้อมตัวตรวจที่แยกความหมายทีละหลัก
- แปลง พ.ศ. ค.ศ. และรูปแบบวันที่ไทย
แปลงปีไปกลับ และลองพิมพ์ format ของ thaidate() ดูผลก่อนใช้จริง
- นับตัวอักษร SMS ภาษาไทย
ดูว่าข้อความไทยหรือมีอีโมจิต้องส่งกี่ SMS เหลือกี่ตัว และแบ่งตรงไหน
- ข้อมูลจังหวัด อำเภอ ตำบล และรหัสไปรษณีย์
รหัสจากกรมการปกครอง รหัสไปรษณีย์จากไปรษณีย์ไทย บอกที่มาทุกแถว ดาวน์โหลดได้ทั้ง JSON CSV SQL และ Excel
มีงานอยากให้ช่วย เล่าให้เราฟัง
บอกสั้น ๆ ว่าอยากทำอะไร หรือระบบเดิมติดตรงไหน เดี๋ยวเราติดต่อกลับทางที่คุณสะดวก
หรืออีเมลถึงเราโดยตรง [email protected]