Воскресенье, 05 Май 2024, 13:51
Uchi.ucoz.ru
Меню сайта
Форма входа

Категории раздела
Высшая математика [11]
Экономическая социология [95]
Основы Менеджмента [64]
Бухгалтерский учёт [157]
Философия [163]
Мировая Экономика [603]
Бизнес планирование [29]
Финансирование и кредитование инвест [105]
Ценообразование [46]
Гражданское право [196]
Права Человека [173]
Основы Маркетинга [207]
Основы энергосбережения [55]
Информатика [0]
Экология и устойчивое развитие [0]
Физика для студентов [0]
Основы права [0]
Политология [0]
Не стандартные примеры на Delphi [169]
Примеры на Delphi7 [108]
Алгоритмы [94]
API [110]
Pascal [152]
Базы Данных [6]
Новости
Чего не хватает сайту?
500
Статистика
Зарегистрировано на сайте:
Всего: 51635


Онлайн всего: 2
Гостей: 2
Пользователей: 0
Яндекс.Метрика
Рейтинг@Mail.ru

Каталог статей


Главная » Статьи » Студентам » Алгоритмы

Проверка ISBN
ISBN (или International Standard Book Numbers, международные стандартные
номера книг) - мистические кодовые числа, однозначно идентифицирующие книги.
Цель этой статьи заключается в том, чтобы убрать покров таинственности,
окружающий структуру ISBN, и в качестве примера разработать приложение,
проверяющее правильность создания кода-кандидата на ISBN.

ISBN имеет длину тринадцать символов, которые ограничиваются в использовании
символами-цифрами от "0" до "9", дефисом, и буквой "X". Этот
тринадцатисимвольный код состоит из четырех частей (между которыми располагается
дефис): идентификатор группы, идентификатор издателя, идентификатор книги для
издателя, и контрольная цифра. Первая часть (идентификатор группы) используется
для обозначения страны, географического региона, языка и пр.. Вторая часть
(идентификатор издателя) однозначно идентифицирует издателя. Третья часть
(идентификатор книги) однозначно идентифицирует данную книгу среди коллекции
книг, выпущенных данным издателем. Четвертая, заключительная часть (контрольная
цифра), используется в коде алгоритме другими цифрами для получения поддающегося
проверке ISBN. Количество цифр, содержащееся в первых трех частях, может быть
различным, но контрольная цифра всегда содержит один символ (расположенный между
"0" и "9" включительно, или "X" для величины 10), а само ISBN в целом имеет
длину тринадцать символов (десять чисел плюс три дефиса, разделяющих три части
ISBN).

ISBN 3-88053-002-5 можно так разложить на части:

Группа: 3
Издатель: 88053
Книга: 002
Контрольная цифра: 5
ISBN можно проверить на правильность кода, используя
простой математический алгоритм. Суть его в следующем: нужно взять каждую из
девяти цифр первых трех частей ISBN (пропуская нечисловые дефисы), умножить
каждую отдельную цифру на число цифр, стоящих слева от позиции числа ISBN (оно
всегда будет меньше одинадцати), сложить все результаты умножения, прибавить
контрольную цифру, после чего разделить получившееся число на одиннадцать. Если
после деления на одинадцать никакого остатка не образуется (т.е., число по
модулю 11 делится без остатка), кандидат на ISBN является верным числом ISBN. К
примеру, используем предыдущий образец ISBN 3-88053-002-5:
ISBN: 3 8 8 0 5 3 0 0 2 5
Множитель: 10 9 8 7 6 5 4 3 2 1
Продукт: 30+72+64+00+30+15+00+00+04+05 = 220
Поскольку 220 на
одинадцать делится без остатка, расмотренный нами кандидат на IDBN является
верным кодом ISBN.

Данный алгоритм проверки легко портируется в код Pascal/Delphi. Для
извлечения контрольной цифры и кода из ISBN номера используются строковые
функции и процедуры, после чего они передаются в функцию проверки. Контрольная
цифра преобразуется в тип целого, на основе ее формируется стартовое значение
составной переменной, состоящей из добавляемых цифр, умноженных на их позицию в
коде ISBN (отдельные цифры, составляющие первые три части ISBN). Для
последовательной обработки каждой цифры используется цикл For, в котором мы
игнорируем дефисы и умножаем текущую цифру на ее позицию в коде ISBN. В
заключение, значение этой составной переменной проверяется на делимость без
остатка на одиннадцать. Если остатка после деления нет, код ISBN верен, если же
остаток существует, то код кандидат на ISBN имеет неправильный код.

Вот пример этой методики, изложенной на языке функций Delphi:

function IsISBN(ISBN:
String): Boolean;
var

Number, CheckDigit: String;
CheckValue, CheckSum, Err: Integer;
i, Cnt: Word;begin

{Получаем контрольную цифру}
CheckDigit := Copy(ISBN, Length(ISBN), 1);
{Получаем остальную часть, ISBN минус
контрольная цифра и дефис}
Number := Copy(ISBN, 1, Length(ISBN) -
2);
{Длина разницы ISBN должны быть 11 и
контрольная цифра между 0 и 9, или X}
if (Length(Number) = 11) and
(Pos(CheckDigit, '0123456789X') > 0) then
begin
{Получаем числовое значение контрольной
цифры}
if (CheckDigit = 'X')
then
CheckSum := 10
else
Val(CheckDigit, CheckSum, Err);
{Извлекаем в цикле все цифры из кода ISBN,
применяя алгоритм декодирования}
Cnt := 1;
for i := 1 to 12 do begin
{Действуем, если только текущий символ
находится между "0" и "9", исключая дефисы}
if (Pos(Number[i], '0123456789')
> 0) then begin
Val(Number[i], CheckValue, Err);
{Алгоритм для каждого символа кода ISBN, Cnt -
n-й обрабатываемый символ}
CheckSum := CheckSum + CheckValue * (11 -
Cnt);
Inc(Cnt);
end;
end;
{Проверяем делимость без остатка полученного
значения на 11}
if (CheckSum MOD 11 = 0) then
IsISBN := True
else
IsISBN := False;
end
else
IsISBN := False;end;
Категория: Алгоритмы | Добавил: Lerka (21 Ноя 2012)
Просмотров: 723 | Рейтинг: 1.0/ 4 Оштрафовать | Жаловаться на материал
Похожие материалы
Всего комментариев: 0

Для блога (HTML)


Для форума (BB-Code)


Прямая ссылка

Профиль
Воскресенье
05 Май 2024
13:51


Вы из группы: Гости
Вы уже дней на сайте
У вас: непрочитанных сообщений
Добавить статью
Прочитать сообщения
Регистрация
Вход
Улучшенный поиск
Поиск по сайту Поиск по всему интернету
Наши партнеры
Интересное
Популярное статьи
Портфолио ученика начальной школы
УХОД ЗА ВОЛОСАМИ ОЧЕНЬ ПРОСТ — ХОЧУ Я ЭТИМ ПОДЕЛИТ...
Диктанты 2 класс
Детство Л.Н. Толстого
Библиографический обзор литературы о музыке
Авторская программа элективного курса "Практи...
Контрольная работа по теме «Углеводороды»
Поиск
Главная страница
Используются технологии uCoz