กำหนดตามลำดับและหน้าที่คือการระบุว่าลำดับที่กำหนดเป็นหมายเลข sa ISBN หรือไม่
หมายเลข ISBN คืออะไร
ISBN ย่อมาจาก International Standard Book Number เป็นตัวเลข 10 หลักจนถึงธันวาคม 2549 และขณะนี้มีการแก้ไขเป็นตัวเลข 13 หลักตั้งแต่วันที่ 1 มกราคม 2550 ด้านล่างนี้คือการใช้ ISBN 10 หลัก
หลัก ISBN มีรูปแบบเป็น -
- ตัวเลขเริ่มต้น 9 หลักหมายถึงชื่อหนังสือ ผู้จัดพิมพ์ และกลุ่มของหนังสือ ค่าของ 9 หลักแรกสามารถอยู่ในช่วงตั้งแต่ 0 - 9
- ตัวเลข 1 หลักสุดท้ายตรวจสอบว่า ISBN ถูกต้องหรือไม่ หลักสุดท้ายสามารถมีค่าเท่ากับ 10 และใช้สัญลักษณ์ 'X' แทนตัวเลขนี้
จะตรวจสอบได้อย่างไรว่าตัวเลข 10 หลักที่ระบุเป็นหมายเลข ISBN หรือไม่
- เริ่มจากหลักแรกของลำดับและคูณด้วย 10 เนื่องจาก ISBN เป็นตัวเลข 10 หลัก
- เลื่อนไปที่หลักถัดไปโดยลดค่าของตัวคูณลง 1
- บวกผลคูณทั้งหมด
- หารผลลัพธ์ด้วย 11
- ใช้เงื่อนไขเพื่อตรวจสอบหมายเลข ISBN
- หากผลลัพธ์หารด้วย 11 ลงตัว ซึ่งหมายความว่าไม่เหลือเศษหรือ 0 เนื่องจากเศษที่เหลือคือตัวเลข ISBN
- หากผลลัพธ์ไม่หารด้วย 11 ลงตัว ซึ่งหมายความว่าเหลือเศษบางส่วนหรือไม่เหลือ 0 เป็นเศษที่เหลือจะไม่ใช่ตัวเลข ISBN
ตัวอย่าง
Input-: 002442142X Output-: Not ISBN Input-: 007462542X Output-: it’s ISBN
อัลกอริทึม
Start Step 1-> declare function to check for ISBN bool isvalid(string &isbn_number) set int n = isbn_number.length() IF (n != 10) return false End Set int sum = 0 Loop For int i = 0 and i < 9 and i++ Set int value = isbn_number[i] - '0' If (0 > value || 9 < value) return false End Set sum += (value * (10 - i)) End Set char last_val = isbn_number[9] IF (last_val != 'X' && (last_val < '0' || last_val > '9')) return false End Set sum += ((last_val == 'X') ? 10 : (last_val - '0')) return (sum % 11 == 0) step 2-> In main() set string isbn_number = "002442142X" IF (isvalid(isbn_number)) Print " is Valid" End Else Print " is invalid End Stop
ตัวอย่าง
#include <bits/stdc++.h> using namespace std; //check whether its a valid ISBN or not 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 (0 > value || 9 < value) 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