แกะรหัส DTAC วิเคราะห์เหตุยอดเรียกเก็บ 461 ล้านล้าน และสิ่งที่ลูกค้าได้เรียนรู้


ดีแทคเรียกเก็บเงินเกิน

          โปรแกรมเมอร์ตั้งกระทู้ แกะรหัส DTAC ลองวิเคราะห์ระบบและสาเหตุของความผิดพลาดของยอดเรียกเก็บเงินลูกค้า 461 ล้านล้าน โดยแจกแจงเป็นขั้นตอนแบบละเอียดยิบ

          กลายเป็นประเด็นในโลกออนไลน์ จากกรณีผู้ใช้เครือข่ายสัญญาณโทรศัพท์ DTAC ได้ออกมาร้องเรียนว่ามีการเรียกเก็บเงินค่าบริการที่สูงเกินความเป็นจริงมากถึง 461 ล้านล้านบาท พร้อมทำการตัดสัญญาณโทรศัพทจนทำให้ผู้ใช้เกิดปัญหา ก่อนต่อมาทาง DTAC จะได้ออกมาขออภัย โดยได้ระบุว่า เป็นความขัดข้องกับระบบแสดงยอดใช้บริการ

          ล่าสุด (9 ธันวาคม 2560) คุณ Anna_NSW สมาชิกเว็บไซต์พันทิปดอทคอม ได้ออกมาตั้งกระทู้ชื่อ "แกะรหัส DTAC" เพื่อวิเคราะห์สาเหตุที่มาที่ไปของตัวเลขยอดเก็บค่าบริการที่ผิดพลาดดังกล่าว รวมถึงระบบการทำงานของของ DTAC ทั้งนี้ ทางเจ้าของกระทู้ได้ระบุว่าเป็นเพียงการคาดเดาของตัวเองเท่านั้น โดยที่ตนเองไม่ได้ทำงาน DTAC ไม่ได้เป็นวิศวกรเครือข่าย ขนาดกด Reset Router ยังทำเองไม่เป็นเลย โดยในการวิเคราะห์ครั้งนี้ จะใช้วิชา System Design ประกอบกับพื้นฐานโปรแกรมมิ่งเท่านั้น

          โดยเจ้าของกระทู้ระบุว่า ข้อมูลที่นำมาใช้คือยอด 461,168,601,842,738.80 บาท ซึ่งตัวเลขนี้น่าสนใจ เพราะคนที่เรียนวิชาคอมพิวเตอร์มาจะรู้ว่า คอมพิวเตอร์นั้นเป็น เลขฐานสอง มีเลขที่น่าสนใจคือ 2 ยกกำลัง 64 ซึ่งถ้าเขียนเป็นเลขฐานสองจะเท่ากับ 10000000000000000000000000000000000000000000000000000000000000000 (1 ตามด้วย 0 ทั้งหมด 64 ตัว) ซึ่งแปลว่าเครื่อง Bandwidth Monitor รวนแน่นอน เพราะจำนวน Bandwidth นั้นควรจะเป็นจำนวนเต็มไม่ติดลบ แต่ค่า Unsigned long integer 64-bit นั้นสูงสุดที่ 264 - 1 เท่ากับว่า เลขข้างบนนั้น เครื่องมันต้องผิดพลาด หรือถ้าใช้ float กับ double (เลขที่มีค่าทศนิยม) มันจะดึงประสิทธิภาพเครื่องให้ต่ำลงมา การออกแบบทีดีควรจะใช้ค่าจำนวนเต็ม
ดีแทคเรียกเก็บเงินเกิน

          พอนำ 2 ยกกำลัง 64 มาคิดเป็นเลขฐานสิบคือ 18,446,744,073,709,600,000 หน่วยเป็น bit เวลาคิดค่าใช้จ่าย DTAC คิดเป็น Byte ดังนั้น ต้อง หาร 8 (8 bit เป็นหนึ่ง Byte) 18,446,744,073,709,600,000 หาร 8 ได้ 2,305,843,009,213,690,000 Byte และถ้า DTAC คิดค่าใช้จ่าย 5000 Byte ต่อ 1 บาท (ไม่ใช่ 5KB - Kilobyte เพราะ 5KB = 5 x 210 = 5120 Bytes ) ค่าใช้จ่ายของแต่ละคนจะเท่ากับ 461,168,601,842,738.80 บาท เป๊ะกว่านี้ ไม่มีอีกแล้ว

          ทีนี้พอระบบ Billing เห็นว่าค่าใช้จ่าย 461,168,601,842,738.80 บาท เกิน Credit Limit ของแต่ละคน ระบบก็ระงับการใช้งาน ซึ่งรวมถึง 1678 ก็ไม่สามารถโทรได้อีกด้วย เพราะใช้งานเกิน Credit Limit แปลว่า 1678 อยู่ใน Service ข้างบนเหมือนกัน

          เจ้าของกระทู้สรุปตรรกะของระบบ DTAC ที่แกะได้จากเหตุการณ์เมื่อวาน โดยเรียงเป็นข้อ ๆ ดังนี้
          1. จำนวน Bandwidth ของผู้ใช้ แต่ละคน Error อยู่ที่ 2 ยกกำลัง 64
          2. DTAC ใช้สูตร 5000 Byte คิด 1 บาท
          3. ระบบ Billing ตั้งไว้ว่าถ้ายอดเกิน Limit จะระงับการใช้งานทันที (ไม่ได้ตั้งเวลา)
          4.  เบอร์ 1678 เป็นเบอร์เสียเงินปกติ เมื่อไม่มี Credit เหลือจึงโทรไม่ได้

ภาพจาก เฟซบุ๊ก Narongchai Meunharn Charkireen

อ่านรายละเอียดเพิ่มเติมจาก Anna_NSW สมาชิกเว็บไซต์พันทิปดอทคอม
เรื่องน่าสนใจอื่นๆ
เรื่องที่คุณอาจสนใจ
แกะรหัส DTAC วิเคราะห์เหตุยอดเรียกเก็บ 461 ล้านล้าน และสิ่งที่ลูกค้าได้เรียนรู้ อัปเดตล่าสุด 9 ธันวาคม 2560 เวลา 16:35:24 29,047 อ่าน
TOP
x close