- ISO 8583 เป็นมาตรฐานสำหรับการแลกเปลี่ยนข้อความแบบเรียลไทม์ระหว่างเครือข่ายบัตรเครดิต
- มาตรฐานนี้กำหนดข้อความที่เกิดขึ้นเมื่อแตะบัตรบนอุปกรณ์ ณ จุดขาย หรือคลิก "ซื้อ" ทางออนไลน์
- ในช่วงแรก POS หรือ ATM จะสร้างข้อความโดยตรง แต่ปัจจุบันมักใช้วิธีแปลงเป็นรูปแบบระดับสูงอย่าง JSON ก่อน แล้วค่อยแปลงเป็น ISO 8583
- โครงสร้างข้อความเรียบง่าย แต่รายละเอียดการติดตั้งใช้งานมีความซับซ้อน และมีความยืดหยุ่นเพื่อให้ทำงานร่วมกันข้ามเครือข่ายได้
รูปแบบข้อความพื้นฐาน
ตัวบ่งชี้ประเภทข้อความ (Message Type Indicator)
- เป็นรหัส 4 หลักที่ใช้ระบุประเภทของข้อความ (เช่น
0100 คือคำขออนุมัติ)
- ช่วยให้ผู้รับทราบได้ว่าควรคาดหวังฟิลด์ใดบ้าง
- วิธีการทำซีเรียลไลซ์อาจต่างกันไปในแต่ละเครือข่าย (เช่น BCD, ASCII)
บิตแมป (Bitmap)
- ใช้ระบุว่ามีฟิลด์ใดอยู่บ้าง
- 1 หมายถึงมีฟิลด์นั้นอยู่ และ 0 หมายถึงไม่มีฟิลด์
- มีขนาด 8 ไบต์ และใช้แทนฟิลด์ได้สูงสุด 64 ฟิลด์
องค์ประกอบข้อมูล (Data Elements)
- ฟิลด์จะถูกทำซีเรียลไลซ์ต่อจากบิตแมป
- ฟิลด์แบบ ความยาวคงที่ จะมีขนาดเท่าเดิมเสมอ ส่วนฟิลด์แบบ ความยาวแปรผัน จะมีข้อมูลความยาวรวมอยู่ด้วย
- การเข้ารหัสฟิลด์อาจใช้ ASCII, BCD, ไบนารี เป็นต้น
โครงสร้างข้อความแบบซ้อน
- มาตรฐาน ISO 8583 อนุญาตให้เครือข่ายใส่ ข้อมูลที่กำหนดเองเฉพาะเครือข่าย ได้
- ข้อความแบบซ้อนสามารถติดตั้งใช้งานได้ในรูปแบบตาราง, บิตแมป, หรือ TLV(Tag-Length-Value)
ตาราง
- ทุกฟิลด์ถูกรวมไว้ด้วยความยาวคงที่
- เพื่อช่วยลดการสิ้นเปลืองพื้นที่ จึงรองรับซับฟิลด์แบบความยาวแปรผันเพิ่มเติม
ข้อความแบบบิตแมป
- ใช้บิตแมประบุว่ามีซับฟิลด์ใดอยู่บ้าง
- ช่วยป้องกันการสิ้นเปลืองพื้นที่เมื่อไม่มีฟิลด์นั้น
ข้อความแบบ TLV
- ฟิลด์จะถูกทำซีเรียลไลซ์เป็นทูเพิลของแท็ก ความยาว และค่า
- ขยายต่อได้และไม่ขึ้นกับลำดับ
การออกแบบพาร์เซอร์
- พาร์เซอร์ ISO 8583 เริ่มจากการวิเคราะห์บิตแมปและนิยามการทำซีเรียลไลซ์ของแต่ละฟิลด์
- ต้องคำนึงถึงการจัดการข้อความแบบซ้อนและความต่างของการติดตั้งใช้งานในแต่ละเครือข่าย
- ใช้ ระบบชนิดข้อมูล Sorbet ของ Ruby เพื่อกำหนดคลาสข้อความที่ปลอดภัย
- สามารถตั้งค่าฟิลด์แบบความยาวคงที่และความยาวแปรผัน รวมถึงการเติมแพดดิ้งได้
การจัดการข้อผิดพลาด
- ออกแบบให้ยังพาร์สฟิลด์ถัดไปได้เมื่อการพาร์สฟิลด์หนึ่งล้มเหลว
- รองรับการจัดการข้อผิดพลาดบางส่วนโดยยังคงการทำซีเรียลไลซ์ของข้อความไว้
- หากเกิดข้อผิดพลาดร้ายแรง จะหยุดการประมวลผลข้อความ
บทสรุป
- มาตรฐาน ISO 8583 ได้พัฒนาอย่างต่อเนื่องนับตั้งแต่ถูกกำหนดขึ้นในปี 1987 เพื่อตอบโจทย์ความต้องการของเครือข่ายที่หลากหลาย
- Increase ช่วยจัดการข้อความ ISO 8583 เพื่อให้ผู้ใช้โฟกัสกับการพัฒนาผลิตภัณฑ์ของตนได้
- สามารถดูเอกสาร API หรือสอบถามได้ที่ ทีม Increase
1 ความคิดเห็น
ความเห็นจาก Hacker News
Visa และ Mastercard ไม่ได้ใช้งาน ISO 8583 ในแบบที่เป็นมาตรฐานเดียวกัน แต่ละบริษัทออกเอกสารยาวหลายพันหน้าเพื่ออธิบายวิธีใช้ฟิลด์มาตรฐานและวิธีใส่ข้อมูลกรรมสิทธิ์ลงในข้อความ แพลตฟอร์มจัดการ/ออกบัตรส่วนใหญ่ซ่อนความซับซ้อนนี้ไว้ได้ดี การเปลี่ยนไปใช้ ISO 20022 เป็นการปรับปรุงในทางที่ดี แต่มีโอกาสน้อยที่จะผ่านเกณฑ์ ROI
รูปแบบของโปรโตคอลประเภทนี้ (ชนิดข้อความ, บิตแมปนิยามฟิลด์, ชุดค่าความยาวคงที่และแปรผัน) เป็นเรื่องปกติในยุคที่มันถูกพัฒนาขึ้น ฝั่งผู้รับต้องระวังตรวจสอบความยาวฟิลด์แบบไดนามิกและไม่อ่านเลยจุดสิ้นสุดของข้อความ อย่างไรก็ตาม ปัญหาเหล่านี้เป็นสิ่งที่เข้าใจกันดีแล้วในปัจจุบัน
น่าหงุดหงิดที่มาตรฐาน ISO 8583 ไม่ได้ระบุวิธีเข้ารหัสฟิลด์หรือชนิดข้อความอย่างชัดเจน ส่งผลให้ผู้รับอาจได้รับชุดไบต์สุ่มที่ไม่สามารถตีความข้อความได้
ช่วงนี้มีการพูดคุยเรื่องการชำระเงินเยอะมาก และ patio11 ก็ทำคอนเทนต์ได้ยอดเยี่ยม เมื่อ 25 ปีก่อนไม่มีเว็บไซต์อธิบายแบบเห็นภาพเช่นนี้ อย่างที่คอมเมนต์อื่นพูดถึง EBCDIC การสลับข้าม endian เป็นเรื่องซับซ้อน เคยมีประสบการณ์สนุก ๆ ช่วงต้นยุค 2000 ตอนร่วมงานกับบัตร Discover เพื่อเพิ่มฟิลด์ GUID เข้าไปในสเปก ISO8583
ระบบการเงินเป็นหนึ่งในสมรภูมิของการเปลี่ยนแปลง มีคนจำนวนมากที่ยังไม่ตระหนักถึงการเปลี่ยนแปลงเหล่านี้ บริษัทเทคโนโลยีรายใหญ่เป็นเจ้าของ ecosystem การชำระเงินของตนเอง จึงควรให้ข้อมูลเชิงลึกแก่คนที่ยังไม่เห็นภาพ บางประเทศก็กำลังเดินตามแนวโน้มนี้
Charles Stross อาจเสียสติไปนิดหน่อยเพราะมาตรฐาน ISO 8583 และนั่นอาจเป็นสาเหตุที่ทำให้เขาเขียน Accelerando มาตรฐานนี้น่าจะเป็นมาตรฐานใหม่ที่เข้ามาแทนโปรโตคอลกำกวมจากยุค 70
เป็นบทความที่อธิบายได้ดีมากว่าเหตุใด ISO20022 จึงควรมาแทน 8583 โดยเฉพาะในภูมิภาคที่เครือข่ายผูกขาดของ M/V ไม่ได้ครองตลาด บัตรเครดิตสามารถนำไปใช้ในระบบการชำระเงินแบบใหม่ร่วมกับบัญชีเครดิตที่ธนาคารให้บริการได้ สามารถทำการชำระเงินระหว่างบัญชีแบบทันที และธุรกรรมต้นทุนต่ำราคาคงที่ได้
สนุกดีที่ได้เห็นวิธีต่าง ๆ ในการเลี่ยงข้อจำกัดของ ISO 8583 ช่วงหลังมีการใช้วิธีส่งข้อมูลเพิ่มเติมที่อยู่นอกธุรกรรมการชำระเงินผ่านการเรียก API ก่อน/หลังข้อความ ISO กันมากขึ้น ซึ่งช่วยลดเวลาออกสู่ตลาด แต่ก็อาจก่อให้เกิดรูปแบบความล้มเหลวใหม่ ๆ ได้
ฟอร์แมตนี้น่าสนใจดี ตอนวิเคราะห์ข้อความ ISO-8583 จะรู้สึกเหมือนได้เห็นประวัติศาสตร์คลี่ออกต่อหน้า ข้อความที่ฉันวิเคราะห์เป็น BCD ไม่ใช่ EBCDIC แต่ในฟิลด์หนึ่งมี XML อยู่ และใน XML ก็มี JSON อยู่ ทุกครั้งที่มีการขยายข้อความก็สะท้อนเทรนด์ของแต่ละยุคสมัย
ต่างจาก Visa และ Mastercard การแจ้งเตือนธุรกรรมของ AMEX เกิดขึ้นแทบจะทันที ทันทีที่รูดบัตร การแจ้งเตือนก็เด้งขึ้นมาบนโทรศัพท์/นาฬิกา ราวกับเวทมนตร์ ดูเหมือนว่า V/MC จะมีหลายชั้นที่ AMEX ไม่มี
ประสบความสำเร็จอย่างมากกับ
iso8583ที่ใช้ไลบรารี Goการรีวิวลอจิกการมาสก์ข้อมูลบัตรเครดิต ISO 8583 ใน system log ที่ถูกเข้ารหัสด้วย base64 (หรือเข้ารหัสด้วย base64 ที่ถูกเข้ารหัสด้วย EBCDIC อีกชั้น) เป็นเรื่องที่น่าสนุกดี