Четверг, 28.03.2024, 23:56
Приветствую Вас Гость

LabSoft

Меню сайта
Категории каталога
Статьи по кодингу [24]
Материалы по кодингу
КреатиFF [144]
Рассказы, истории, анекдоты...
Разное [8]
Советы, трюки, полезные рекомендации, статьи о новом и забытом старом...
Наш опрос
Оцените сайт:
Всего ответов: 19
Главная » Статьи » Статьи по кодингу

ISSN
ISSN (англ. International Standard Serial Number) — уникальный номер, используемый для идентификации печатного или электронного периодического издания, состоящий из 8 цифр. 8 цифра — контрольное число, рассчитываемое по предыдущим 7 и модулю 11.
Наряду с индексами ББК, УДК и авторским знаком, ISBN является частью так называемого издательского пакета.Стандарт был разработан в Великобритании в 1966 году, а в 1970 году с небольшим изменением был принят как международный стандарт ISO 2108. Существует также подобный стандарт ISSN (International Standard Serial Number) для периодических изданий. В России ISBN используется с 1987 года.
Номера ISBN, присвоенные книгам до 2006 года издания включительно, имеют длину 10 символов и состоят из четырёх полей переменной длины:
страна происхождения или группа стран, объединенная языком издания (например: 0 и 1 — Английский язык, 2 — Французский, 3 — Немецкий, 4 — Япония, 5 — СССР / Россия, 600 — Иран, 7 — Китай, 80 — Чехия и Словакия, 953 — Хорватия, 9956 — Камерун, 99948 — Эритрея); код издательства (в России — от двух до 7 знаков); уникальный номер издания (в России — соответственно от 6 до 1 знака); контрольная цифра (арабская от 0 до 9 или римская X).
Для использования в качестве штрихкодов формата EAN-13 к ISBN добавляется префикс 978 и вместо контрольной цифры ISBN используется контрольная цифра, рассчитанная по стандарту EAN-13. Выделен ещё один префикс — 979

Теперь посмотрим сам процесс вычисления:
//Стандарт ISBN-13 принятый в 1.1.2007.
function ISBN(const s: string; streng: Boolean): Boolean;
var
i, x, n: Integer;
tmp: string;
begin
Result := True;
if (not streng) or ((Copy(s, 1, 5) = 'ISBN ') and (Length(s) = 22)
and (s[9] = '-') and (s[21] = '-')) then
begin
for i := 1 to Length(s) do
if s[i] in ['0'..'9'] then
tmp := tmp + s[i]
else
if streng then
if (s[i] = '-') then
Inc(n)
else
if (i > 5) then
Result := False;
if (Result) and ((not streng) or (n = 4)) then
begin
if Length(tmp) = 13 then
begin
for i := 1 to 12 do
if i div 2 = i/2 then
x := x + StrToInt(tmp[i]) * 3
else
x := x + StrToInt(tmp[i]);
if StrToInt(tmp[13]) <> ((10 - (x mod 10)) mod 10) then
Result := False;
end
else
Result := False;
end
else
Result := False;
end
else
Result := False;
end;

//старый стандарт ISBN-10
function ValidISBN(const aISBN: string): boolean;
var
hNumber,
hCheckDigit: string;
hCheckValue,
hCheckSum,
Err: integer;
i,Cnt: Word;
begin
Result := false;
hCheckDigit := Copy(aISBN, Length(aISBN), 1);
hNumber := Copy(aISBN, 1, Length(aISBN) - 2);
{длина ISBN - 11}
if (Length(hNumber)=11)and(Pos(hCheckDigit,'0123456789X') > 0) then
begin
if (hCheckDigit = 'X') then
hCheckSum := 10
else
Val(hCheckDigit, hCheckSum, Err);
Cnt := 1;
for i := 1 to 12 do
begin
if (Pos(hNumber[i], '0123456789') > 0) then
begin
Val(hNumber[i], hCheckValue, Err);
hCheckSum := hCheckSum + hCheckValue * (11 - Cnt);
Inc(Cnt);
end;
end;
if (hCheckSum mod 11 = 0) then
Result := true
else
Result := false;
end;
end;

//думаю проблем с разбором быть не должно!
</pre>

Категория: Статьи по кодингу | Добавил: Jimmy (31.01.2008) | Автор: Unknown
Просмотров: 723 | Комментарии: 2 | Рейтинг: 0.0/0 |
Всего комментариев: 1
1 Unoneeabseni  
0
compounding pharmacy classifieds http://sundrugstore.net/categories/weight-loss.htm rexall pharmacy

Имя *:
Email *:
Код *:
Форма входа
Поиск
Друзья сайта
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0