เมนู

EAN และ UPC: หลักตรวจสอบของบาร์โค้ด

EAN และ UPC มีหลักตรวจสอบอยู่ที่ตำแหน่งสุดท้ายของบาร์โค้ด บทความนี้อธิบายแนวคิดการถ่วงน้ำหนัก ความหมายของคำนำหน้า และเหตุผลที่ผ่านการตรวจไม่ได้รับประกันความแท้ของสินค้า

เผยแพร่เมื่อ

  • บาร์โค้ด
  • หลักตรวจสอบ
  • ข้อมูลทดสอบ

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

หลักสุดท้ายของบาร์โค้ดสินค้ามาจากไหน?

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

การมีหลักตรวจสอบอยู่ท้ายสุดทำให้เครื่องอ่านและระบบรับข้อมูลสามารถตรวจได้ทันทีว่าชุดตัวเลขที่อ่านได้สอดคล้องกันภายในตัวมันเองหรือไม่ หากอ่านได้ตัวเลขครบแต่ผลรวมไม่ลงตัว เครื่องหรือระบบปลายทางจะเตือนทันทีว่าควรอ่านซ้ำ

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

บาร์โค้ดสองความยาวที่พบบ่อยและตำแหน่งเริ่มถ่วงน้ำหนัก

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

จุดที่ทำให้เกิดความผิดพลาดบ่อยคือตำแหน่งเริ่มต้นของการถ่วงน้ำหนัก น้ำหนักจะเริ่มจากด้านขวาเสมอ และเพราะความยาวต่างกัน ตำแหน่งที่น้ำหนักค่าหนึ่งตกจึงไม่ตรงกันระหว่างสองแบบ

ผลที่ตามมาคือการเขียนตรรกะโดยกำหนดความยาวตายตัวไว้ค่าเดียว จะทำให้อีกความยาวหนึ่งคำนวณผิดทันทีโดยไม่แจ้งข้อผิดพลาด สิ่งที่ควรทำคือให้ความยาวเป็นพารามิเตอร์ที่ส่งเข้ามา และตรวจความยาวก่อนคำนวณเสมอ

แนวคิดการถ่วงน้ำหนักจากขวาไปซ้าย

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

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

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

คำนำหน้าบาร์โค้ดบอกอะไร และไม่บอกอะไร

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

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

อีกจุดที่ควรระวังคือการแบ่งช่วงหมายเลขเกิดขึ้นในหลายระดับ ช่วงหนึ่งจัดสรรให้ผู้ประกอบการ อีกระดับจัดสรรให้ตัวสินค้า เมื่อช่วงหมายเลขถูกตัดแบ่งใหม่ในภายหลัง สินค้าชนิดเดียวอาจมีหมายเลขสองชุดที่ถูกต้องทั้งคู่

ผ่านการตรวจแล้วยิงเครื่องอ่านได้เสมอหรือไม่?

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

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

  • ตัวเลขตกหรือเกินไปหนึ่งหลักตั้งแต่ขั้นตอนพิมพ์ฉลาก
  • ฉลากของสินค้าสองชิ้นวางชิดกันจนเครื่องอ่านรวมตัวเลขข้ามชิ้น
  • ฉลากที่พิมพ์จางหรือเปรอะจนเครื่องอ่านเดาหลักผิด
  • การนำตัวเลขไปกรอกใหม่ด้วยมือแล้วสลับตำแหน่งของสองหลัก

ดังนั้นเมื่อผลการตรวจไม่ผ่าน สิ่งแรกที่ควรทำคืออ่านซ้ำและตรวจว่าข้อมูลนำเข้ามีความยาวถูกต้อง มิใช่ตั้งสมมติฐานเรื่องการปลอมแปลงตั้งแต่ต้น

สำหรับทีมที่ต้องดูแลแคตตาล็อกสินค้า การแยกคำตอบให้ชัดระหว่างความผิดพลาดด้านรูปแบบกับความไม่สอดคล้องของหลักตรวจสอบช่วยให้จัดคิวงานแก้ไขได้ถูก เพราะสองกรณีนี้แก้โดยคนละวิธี

การแยกสองกรณีนี้ออกจากกันยังช่วยเรื่องการรายงานด้วย เพราะรายการที่รูปแบบผิดแก้ได้ในระบบของเราเอง แต่รายการที่หลักตรวจสอบไม่สอดคล้องต้องกลับไปตรวจที่ต้นทางของข้อมูล ซึ่งมักอยู่นอกการควบคุมของทีม จึงควรบันทึกไว้ด้วยว่าข้อมูลชุดนั้นรับมาจากแหล่งใด เพื่อให้ตามแก้ได้ตรงจุด

สำหรับนักพัฒนา: ตรวจเป็นชุดและหาตำแหน่งที่ผิด

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

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

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

เมื่อพบรายการที่ไม่ผ่าน ควรบันทึกค่าต้นทางและค่าที่ปรับรูปแบบแล้วไว้คู่กันเสมอ เพราะเมื่อนำผลไปแก้ย้อนหลัง ต้องแยกให้ออกว่าความผิดพลาดเกิดจากข้อมูลที่รับมาหรือเกิดจากขั้นตอนปรับรูปแบบของเราเอง

ก้าวต่อไป

เริ่มจากการตรวจว่าส่วนคำนวณหลักตรวจสอบของระบบคุณรับความยาวเป็นพารามิเตอร์หรือไม่ หากยังกำหนดไว้คงที่ ให้แก้จุดนี้ก่อน เพราะเป็นสาเหตุที่พบบ่อยที่สุดของผลลัพธ์ผิดที่ไม่แจ้งเตือน

บาร์โค้ดและตัวเลขที่ยกมาในบทความนี้เป็นค่าสมมติสำหรับอธิบายการคำนวณเท่านั้น ไม่ใช่สินค้าจริง และการตรวจหลักสุดท้ายผ่านไม่ได้ยืนยันความแท้ของสินค้า

อ่านต่อ

บทความเกี่ยวกับ ตรวจสอบเลขบัตรประชาชน