วันหมดอายุบัตรเครดิตเป็นข้อมูลเพียงไม่กี่หลักบนหน้าบัตร แต่กลับเป็นช่องที่สร้างความสับสนให้ผู้ใช้มากที่สุดช่องหนึ่งในฟอร์มชำระเงิน เพราะรูปแบบที่พิมพ์บนบัตร รูปแบบที่ผู้ใช้พิมพ์ และรูปแบบที่ระบบเก็บไว้ภายใน ล้วนไม่เหมือนกัน บทความนี้จะอธิบายว่าตัวเลขบนบัตรหมายถึงช่วงเวลาใดแน่ ค่าขอบเขตที่ต้องระวังคือจุดใด และทำไมระบบที่ดีต้องเตือนล่วงหน้าก่อนบัตรหมดอายุ
วันหมดอายุที่พิมพ์บนบัตรบอกอะไร?
บนหน้าบัตรมักมีตัวเลขชุดสั้น ๆ ที่แสดงเดือนกับปี โดยเดือนเขียนเป็นสองหลักและปีเขียนเป็นสองหลัก เรียงติดกันหรือคั่นด้วยเครื่องหมายทับ เครื่องหมายนี้มีไว้เพื่อความชัดเจนในการอ่านเท่านั้น ไม่ได้เป็นส่วนหนึ่งของข้อมูลที่ระบบต้องเก็บ
ความหมายเชิงเวลาของมันคือ “บัตรนี้ใช้ได้จนถึงสิ้นเดือนที่ระบุ” ไม่ใช่จนถึงต้นเดือน และไม่ใช่จนถึงวันที่หนึ่งของเดือนถัดไป นี่คือรายละเอียดที่ทั้งผู้ใช้และทีมพัฒนามักตีความคลาดเคลื่อน และเป็นสาเหตุของปัญหาที่ผู้ใช้กรอกบัตรที่ยังใช้ได้แต่ระบบกลับบอกว่าหมดอายุ
อีกเรื่องที่ควรรู้คือปีที่พิมพ์มีเพียงสองหลัก แต่ละระบบตีความปีสองหลักให้เป็นปีเต็มตามช่วงเวลาที่ตัวเองยอมรับ การตีความนี้เป็นเรื่องภายในของแต่ละระบบ ไม่ได้อยู่บนหน้าบัตร และไม่ได้เป็นข้อมูลที่ผู้ใช้ต้องกรอก
บัตรหมดอายุปลายเดือนหรือต้นเดือน
คำถามนี้สำคัญพอที่จะตอบให้ตรง ๆ ว่า บัตรที่พิมพ์เดือนหมดอายุหนึ่ง ๆ ยังใช้งานได้ตลอดทั้งเดือนนั้น และถือว่าหมดอายุเมื่อเดือนนั้นผ่านไปแล้ว จุดเปลี่ยนจึงอยู่ที่การขึ้นเดือนใหม่ ไม่ใช่การขึ้นวันใหม่
ลองนึกภาพบัตรที่พิมพ์ว่าเดือนที่สิบสอง ปีสองหลักถัดไป ในวันสุดท้ายของเดือนธันวาคมบัตรยังใช้ได้ตามปกติ และจะกลายเป็นหมดอายุเมื่อเข้าสู่วันแรกของเดือนมกราคมปีถัดไป ระบบที่ตัดสินว่าหมดอายุทันทีเมื่อถึงวันที่หนึ่งของเดือนที่ระบุ จะปฏิเสธบัตรที่ยังใช้ได้จริงทั้งเดือน
ประเด็นนี้ยังส่งผลต่อการทดสอบด้วย หากคุณทดสอบเฉพาะวันที่ต้นเดือนและปลายเดือน แต่ไม่ได้ทดสอบวันสุดท้ายของเดือน คุณอาจพลาดข้อผิดพลาดที่เกิดจากเงื่อนไขเปรียบเทียบที่ไม่ระวัง
รูปแบบที่พิมพ์บนบัตรไม่เหมือนรูปแบบที่ระบบเก็บ
ความต่างระหว่างสิ่งที่มองเห็นกับสิ่งที่ระบบเก็บเป็นหัวใจของความสับสนในช่องนี้ ตารางต่อไปนี้เปรียบเทียบให้เห็นภาพ
| บริบท | ลักษณะของค่า |
|---|---|
| หน้าบัตร | เดือนสองหลัก ตามด้วยปีสองหลัก |
| หน้าจอที่ผู้ใช้กรอก | มักเป็นช่องเดียวรับตัวเลขสี่หลัก หรือสองช่องแยกเดือนกับปี |
| ระบบที่เก็บข้อมูล | มักแยกเป็นเดือนกับปีเต็ม สี่หลัก เพื่อให้คำนวณและจัดเรียงได้ |
| เอกสารของระบบเชื่อมต่อ | บ่อยครั้งใช้ปีเต็มกับเดือน และอาจรับเดือนเป็นหนึ่งหรือสองหลัก |
เมื่อรูปแบบต่างกันหลายชั้น การแปลงไปมาที่ไม่ระวังจึงเป็นจุดเกิดข้อผิดพลาดได้ง่าย เช่น การเติมศูนย์นำหน้าให้เดือนที่ผู้ใช้กรอก หรือการตีความปีสองหลักผิดช่วงเวลา สิ่งเหล่านี้ทำให้บัตรที่ถูกต้องถูกปฏิเสธ หรือแย่กว่านั้นคือบัตรที่หมดอายุแล้วถูกมองว่ายังใช้ได้
ข้อสรุปที่ควรจำคือ รูปแบบที่แสดงต่อผู้ใช้เป็นเรื่องของประสบการณ์การใช้งาน ส่วนรูปแบบที่ใช้เปรียบเทียบเป็นเรื่องของตรรกะธุรกิจ ทั้งสองอย่างต้องถูกแปลงอย่างตั้งใจ ไม่ควรปล่อยให้ค่าที่ผู้ใช้เห็นไหลเข้าไปในเงื่อนไขโดยตรง
ความผิดพลาดที่พบบ่อยในช่องวันหมดอายุ
รายการต่อไปนี้คือปัญหาที่ทีมพัฒนาพบซ้ำแล้วซ้ำอีก
- ยอมรับเฉพาะปีเต็ม ขณะที่บนบัตรพิมพ์ปีสองหลัก ทำให้ผู้ใช้กรอกไม่ได้
- ยอมรับเฉพาะปีสองหลัก แต่เมื่อผู้ใช้กรอกปีเต็มกลับถูกตีความผิดและกลายเป็นปีที่ผ่านไปแล้ว
- ไม่ตัดเครื่องหมายทับหรือช่องว่างที่ผู้ใช้พิมพ์ติดมา ทำให้ค่าที่ส่งไปตรวจไม่ตรงรูปแบบ
- ตัดสินว่าหมดอายุเมื่อถึงต้นเดือนของเดือนที่ระบุ แทนที่จะรอจนสิ้นเดือน
- ไม่แสดงข้อความเตือนเมื่อบัตรจะหมดอายุในอีกไม่กี่เดือน ทำให้ผู้ใช้ทราบเรื่องเมื่อสายเกินไป
- เก็บค่าเป็นข้อความแบบที่ผู้ใช้พิมพ์ โดยไม่จัดระเบียบ ทำให้ค้นหาและเปรียบเทียบทำได้ยาก
แต่ละข้อล้วนทำให้อัตราการทำรายการสำเร็จลดลงโดยไม่จำเป็น และแก้ได้ด้วยการปรับกติกาเพียงเล็กน้อย
ทำไมระบบต้องเตือนก่อนบัตรหมดอายุ?
บัตรที่ใกล้หมดอายุคือสาเหตุการปฏิเสธที่คาดเดาได้ล่วงหน้า และเป็นการปฏิเสธที่หลีกเลี่ยงได้ หากระบบเตือนผู้ใช้ล่วงหน้าพอสมควร ผู้ใช้ก็มีเวลารอรับบัตรใหม่จากธนาคารก่อนที่รายการต่อเนื่องจะล้มเหลว
การเตือนที่มีประโยชน์ควรบอกช่วงเวลาที่เหลืออย่างชัดเจน เช่นบัตรจะหมดอายุในเดือนใด และควรปรากฏในช่วงเวลาที่ผู้ใช้กำลังใช้งานอยู่จริง ไม่ใช่ในอีเมลที่อาจไม่ถูกเปิดอ่าน การแสดงข้อความเตือนในหน้าจัดการบัตรที่บันทึกไว้จึงมักได้ผลดีกว่าการแจ้งทางเดียว
ในมุมกลับกัน การเตือนที่ไม่แม่นยำก็สร้างความรำคาญได้ ถ้าระบบเตือนทุกครั้งที่ผู้ใช้กรอกบัตรที่เหลืออายุไม่กี่ปีโดยไม่ดูบริบท ผู้ใช้จะเริ่มมองข้ามข้อความเตือนนั้นไปเอง
สำหรับนักพัฒนา: ตัดสินว่าเลยกำหนดอย่างไร
หัวใจของส่วนนี้คือการแปลงค่าที่ผู้ใช้กรอกให้เป็นเดือนกับปีที่ชัดเจน แล้วเปรียบเทียบกับเดือนปัจจุบันด้วยหน่วยเดียวกัน ข้อควรระวังที่ช่วยได้จริงมีดังนี้
- เปรียบเทียบเป็นรายเดือน ไม่ใช่รายวัน และให้เดือนที่ระบุถือว่ายังใช้ได้ทั้งเดือน
- เติมศูนย์นำหน้าให้เดือนเสมอ เพื่อให้เรียงลำดับตัวอักษรได้ตรงกับลำดับเวลา
- แปลงปีสองหลักเป็นปีเต็มด้วยกติกาที่เขียนไว้ชัดเจน แล้วทดสอบค่าขอบเขตของช่วงเวลานั้น
- ปฏิเสธเดือนที่ไม่อยู่ในช่วงหนึ่งถึงสิบสองด้วยข้อความแยกออกจากข้อความ “บัตรหมดอายุ”
- ทดสอบด้วยข้อมูลที่ตั้งใจให้อยู่ที่ขอบพอดี ทั้งเดือนสุดท้ายของปี เดือนปัจจุบัน และเดือนถัดไปหนึ่งเดือน
การทดสอบค่าขอบเขตแบบนี้ให้ผลดีกว่าการทดสอบด้วยบัตรตัวอย่างเพียงใบเดียว เพราะบัตรตัวอย่างหนึ่งใบมีค่าเดือนและปีเพียงค่าเดียว และแทบไม่เคยตกที่ขอบพอดี
ทดสอบช่องวันหมดอายุด้วยข้อมูลสมมติ
ข้อมูลทดสอบที่ดีต้องมีทั้งหมายเลขบัตรที่โครงสร้างถูกต้อง วันหมดอายุในอนาคต และรหัสยืนยันครบชุด เครื่องมือสร้างหมายเลขบัตรบนเว็บไซต์นี้สร้างชุดข้อมูลดังกล่าวให้ได้ครั้งละหลายรายการ โดยหมายเลขทุกใบเป็นข้อมูลสมมติที่ไม่ผูกกับบัญชีจริงและไม่เคยถูกออกให้กับใคร ใช้ได้เฉพาะกับงานทดสอบเท่านั้น
หากคุณต้องการทดสอบว่าฟอร์มจัดการกับข้อมูลทั้งสามช่องพร้อมกันได้ราบรื่น ควรอ่านเช็กลิสต์ทดสอบฟอร์มชำระเงินประกอบ และถ้าต้องการทำความเข้าใจว่ารหัสยืนยันบนบัตรมีข้อจำกัดอะไรบ้าง อ่านต่อได้ที่CVV คืออะไร ส่วนรายละเอียดของหมายเลขบัตรที่มักถูกจัดกลุ่มไม่เหมือนกันในแต่ละเครือข่ายอยู่ในรูปแบบหมายเลขบัตรเครดิต
ก้าวต่อไป
ตรวจช่องวันหมดอายุในระบบของคุณด้วยคำถามสามข้อนี้ วันสุดท้ายของเดือนที่ระบุถือว่ายังใช้ได้หรือไม่ ปีสองหลักถูกตีความด้วยกติกาที่เขียนไว้ชัดเจนแล้วหรือยัง และมีข้อความเตือนล่วงหน้าอยู่ในหน้าที่ผู้ใช้มองเห็นจริงหรือไม่ เมื่อตอบครบทั้งสามข้อแล้ว จึงค่อยทดสอบด้วยข้อมูลสมมติที่ตั้งใจให้ตกที่ขอบพอดี ซึ่งจะเผยข้อผิดพลาดที่การทดสอบด้วยข้อมูลทั่วไปมองไม่เห็น