مسیرها
/
Julia
Julia
/
تمرین‌ها
/
اعتبارسنج ISBN
اعتبارسنج ISBN

اعتبارسنج ISBN

متوسط

دستورالعمل‌ها

از فرایند اعتبارسنجی ISBN-10 برای اعتبارسنجی شماره‌های شناسایی کتاب استفاده می‌شود. این شماره‌ها معمولاً خط تیره دارند و به این شکل‌اند: 3-598-21508-8

ISBN

قالب ISBN-10 شامل ۹ رقم (از ۰ تا ۹) به‌علاوه یک نویسه‌ی کنترلی است (که تنها یک رقم یا یک X است). اگر نویسه‌ی کنترلی X باشد، این نویسه نشان‌دهنده‌ی مقدار «۱۰» است. این شماره‌ها ممکن است با خط تیره یا بدون آن نوشته شوند و می‌توان اعتبارشان را با فرمول زیر بررسی کرد:

(d₁ * 10 + d₂ * 9 + d₃ * 8 + d₄ * 7 + d₅ * 6 + d₆ * 5 + d₇ * 4 + d₈ * 3 + d₉ * 2 + d₁₀ * 1) mod 11 == 0

اگر نتیجه ۰ باشد، ISBN-10 معتبر است؛ در غیر این صورت نامعتبر است.

مثال

بیایید ISBN-10 یعنی 3-598-21508-8 را در نظر بگیریم. آن را در فرمول جای می‌گذاریم و به این نتیجه می‌رسیم:

(3 * 10 + 5 * 9 + 9 * 8 + 8 * 7 + 2 * 6 + 1 * 5 + 5 * 4 + 0 * 3 + 8 * 2 + 8 * 1) mod 11 == 0

چون نتیجه ۰ است، این نشان می‌دهد که ISBN ما معتبر است.

وظیفه

برنامه با گرفتن یک رشته باید بررسی کند که آیا رشته‌ی داده‌شده یک ISBN-10 معتبر است یا نه. پیاده‌سازی این کار نیازمند کمی تأمل درباره‌ی پیش‌پردازش و تجزیه‌ی رشته پیش از محاسبه‌ی رقم کنترلی ISBN است.

برنامه باید بتواند ISBN-10 را هم با خط تیره‌های جداکننده و هم بدون آن‌ها بررسی کند.

نکات

تبدیل رشته به عدد در برخی زبان‌ها می‌تواند دشوار باشد. حالا این کار حتی دشوارتر هم شده است، چون رقم کنترلی یک ISBN-10 ممکن است X باشد (که نشان‌دهنده‌ی ۱۰ است). برای نمونه 3-598-21507-X یک ISBN-10 معتبر است.

کارهای امتیاز

اگر این کارها را انجام دهید، لطفاً تست‌های خودتان را برایشان در فایل راه‌حل بنویسید!

  • یک «ماکروی رشته‌ای» تعریف کنید تا isbn"3-598-21507-X" == ISBN("3-598-21507-X").

  • بگذارید «سازنده» ISBN-13ها را هم بپذیرد. یک ISBN یکسان باید بدون توجه به قالب برابر مقایسه شود: ISBN("1-234-56789-X") == ISBN("978-1-234-56789-7").

  • یک تابع یا «تکرارگر» تعریف کنید که یک ISBN معتبر تولید کند، شاید حتی از یک ISBN شروع داده‌شده.

آیا می‌توانید ISBN را به‌جای رشته به‌صورت عدد صحیح ذخیره کنید و آیا این کار اصلاً ایده‌ی خوبی است؟ اگر این کار را بکنید، آیا همچنان می‌توانید ISBN را (همراه با رقم کنترل) به‌صورت رشته چاپ کنید؟

ویرایش از طریق GitHub این لینک در پنجره یا زبانه‌ی جدیدی باز می‌شود
Julia Exercism

آماده‌اید اعتبارسنج ISBN را شروع کنید؟

در Exercism ثبت‌نام کنید تا Julia را همراه با 35 مفهوم128 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.