โจทย์

กำหนดให้มีกลุ่มของตัวเลขของบัตรเครดิตออกเป็น 3 กลุ่ม ตัวเลขทุกกลุ่มถูกเก็บอยู่ในรูปของ array

  • valid = กลุ่มหมายเลขบัตรเครดิตที่ถูกต้อง
  • invalid = กลุ่มหมายเลขบัครเครดิตที่ไม่ถูกต้อง
  • mystery = กลุ่มที่ไม่รู้ว่าถูกต้องหรือไม่

batch เป็น array ที่เก็บ array ของตัวเลขบัตรเครดิตทั้งหมด

กำหนดให้บริษัทที่ออกบัตรใช้ตัวเลขตัวแรกบนบัตรเครดิตต่างกัน

ตัวเลขตัวแรกบนบัตรบริษัทผู้ออกบัตร
3Amex (American Express)
4Visa
5MasterCard
6Discover

Algorithm ที่ใช้

ใช้ Luhn Algorithm ในการตรวจสอบความถูกต้องของตัวเลขบนบัตร

  • เริ่มจากตัวเลขขวามือสุด
  • คูณตัวเลขด้วย 2 แบบตัวเว้นตัว จากขวามือมาซ้ายมือ (ตัวเลขขวาสุดไม่ต้องคูณ เริ่มคูณที่ตัวถัดมา)
  • ผลคูณมีค่ามากกว่า 9 ให้เอา 9 ลบออก
  • เอาตัวเลขที่ได้ทุกตัวมาบวกกัน
  • เอาผลบวกมาหารด้วย 10 ถ้าไม่เหลือเศษ ตัวนี้เป็นกลุ่มตัวเลขบัตรเครดิตถูกต้อง

เป้าหมายของโปรแกรม

เพื่อแสดงชื่อบริษัทที่ออกบัตรที่มีหมายเลขบัตรที่ไม่ถูกต้อง แสดงชื่อบริษัทเพียง 1 ครั้งเท่านั้น แม้ว่าบริษัทนั้นจะออกบัตรหมายเลขไม่ถูกต้องมากกว่า 1 ใบก็ตาม

สร้าง function สำหรับ ​Luhn Algorithm

  • กำหนด function ให้มี parameter 1 อัน รับข้อมูล array ของหมายเลขบัตรแต่ละกลุ่ม
  • กำหนดตัวแปร sum เพื่อบวกค่าตัวเลขที่ได้จากการคำนวณ
  • ใช้ for loop เพื่อเช็คตำแหน่ง index ของสมาชิกใน array แต่ละตัวจากขวาไปซ้าย
  • กำหนดตัวแปร arrValue เพื่อเก็บค่าสมาชิกของ index แต่ละตัว
  • ใช้ if conditional statement เพื่อหาตำแหน่ง index ที่เป็นเลขคี่ จากนั้นคูณเลขคี่ด้วย 2
  • ใช้ if statement เพื่อลบผลคูณออกด้วย 9 หากผลคูณมีค่ามากกว่า 9
  • บวกค่าที่ได้ในค่าของตัวแปร sum
  • return ค่าของตัวแปร sum โดยหารค่าของตัวแปร sum ด้วย 10 กำหนดให้เศษที่ได้เป็น 0
  • แสดงผลเป็น true (ผลหารเป็น 0) หรือ false (ผลหารไม่เป็น 0)

สร้าง function หาหมายเลขบัตรที่ไม่ถูกต้อง

  • กำหนด function ให้มี parameter 1 อัน รับข้อมูล array ของหมายเลขบัตรแต่ละกลุ่ม
  • กำหนด array ว่าง
  • ใช้ for loop เช็ค array ใน parameter ทีละ array
  • ใช้ function แรกใน if conditional statement เพื่อหาค่า boolean ของ array
  • หากค่า boolean เป็น false ใส่ array นั้นลงใน array ว่างที่สร้างไว้
  • return array ว่าง
  • แสดงผลกลุ่มของตัวเลขบัตรเครดิตที่ไม่ถูกต้องทีละกลุ่ม

สร้าง function หาชื่อบริษัทที่ออกบัตรที่มีหมายเลขไม่ถูกต้อง

  • กำหนด function ให้มี parameter 1 อัน รับข้อมูล array ของหมายเลขบัตรที่มีหมายเลขที่ไม่ถูกต้อง
  • สร้าง array ว่าง เพื่อเก็บรายการชื่อบริษัทที่ได้จากการคำนวณ
  • ใช้ for loop วนเช็ค array ใน parameter ทีละ array
  • ใช้ switch statement เช็คตำแหน่ง index ของแต่ละ array ใน bracket notation [ ] แรก และ เช็คตำแหน่งแรกของสมาชิกใน array ด้วย bracket notation อันทีสอง ให้ค่า index เป็น 0
  • กำหนด case เป็นหมายเลขบัตรตัวแรก
  • ใช้ if conditional statement เพื่อเช็คว่าใน array ที่สร้างไว้เก็บชื่อบริษัทไม่มีชื่อบริษัทที่ต้องการบันทึกครั้งนี้อยู่ (ตามเป้าหมายของโปรแกรมที่ต้องการแสดงชื่อบริษัทเพียงครั้งเดียวเท่านั้น)
  • เพิ่มชื่อบริษัทโดยใช้ .push( ) method หากตัวเลขตัวแรกตรงกับ case ที่กำหนด
  • return array ของชื่อบริษัทที่บันทึกได้