บทนำ
ISBN (International Standard Book Number) เป็นรหัสหนังสือมาตรฐานระหว่างประเทศ เดิมเป็น 10 หลัก (ก่อน 2007) ปัจจุบันเป็น 13 หลัก บทความนี้ครอบคลุม ISBN 10 หลัก
โครงสร้าง ISBN-10
- 9 หลักแรก: รหัสชื่อหนังสือ สำนักพิมพ์ และกลุ่ม (ค่า 0-9)
- หลักที่ 10: ตรวจสอบความถูกต้อง (ค่า 0-9 หรือ X แทน 10)
วิธีตรวจสอบ
- คูณหลักที่ 1 ด้วย 10, หลักที่ 2 ด้วย 9, ..., หลักที่ 9 ด้วย 2
- หลักที่ 10: ถ้าเป็น X ให้ค่า 10 มิฉะนั้นค่าเป็นตัวเลข
- รวมผลคูณทั้งหมด
- หารด้วย 11 ถ้าเหลือเศษ 0 → ISBN ถูกต้อง
ตัวอย่างโค้ด C++
#include <bits/stdc++.h>
using namespace std;
bool isvalid(string &isbn_number) {
int n = isbn_number.length();
if (n != 10) return false;
int sum = 0;
for (int i = 0; i < 9; i++) {
int value = isbn_number[i] - '0';
if (value < 0 || value > 9) return false;
sum += (value * (10 - i));
}
char last_val = isbn_number[9];
if (last_val != 'X' && (last_val < '0' || last_val > '9'))
return false;
sum += ((last_val == 'X') ? 10 : (last_val - '0'));
return (sum % 11 == 0);
}
int main() {
string isbn_number = "002442142X";
if (isvalid(isbn_number))
cout << isbn_number << " is Valid";
else
cout << isbn_number << " is invalid";
return 0;
}
ผลลัพธ์
002442142X is invalid