LibKing » Книги » comp-programming » Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001

Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001

Тут можно читать онлайн Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001 - бесплатно полную версию книги (целиком). Жанр: comp-programming. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте LibKing.Ru (ЛибКинг) или прочесть краткое содержание, предисловие (аннотацию), описание и ознакомиться с отзывами (комментариями) о произведении.
libking
  • Название:
    Советы по Delphi. Версия 1.4.3 от 1.1.2001
  • Автор:
  • Жанр:
  • Издательство:
    неизвестно
  • Год:
    неизвестен
  • ISBN:
    нет данных
  • Рейтинг:
    4/5. Голосов: 101
  • Избранное:
    Добавить в избранное
  • Ваша оценка:

Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001 краткое содержание

Советы по Delphi. Версия 1.4.3 от 1.1.2001 - описание и краткое содержание, автор Валентин Озеров, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

…начиная с 1001. Смотрите другие файлы…

Советы по Delphi. Версия 1.4.3 от 1.1.2001 - читать онлайн бесплатно полную версию (весь текст целиком)

Советы по Delphi. Версия 1.4.3 от 1.1.2001 - читать книгу онлайн бесплатно, автор Валентин Озеров
Тёмная тема

Шрифт:

Сбросить

Интервал:

Закладка:

Сделать

constStrTable: string=

'!#$%&/()=?@<>|{[]}\*~+#;:.-_' +

'ABCDEFGHIJKLMabcdefghijklm' +

'0123456789' +

'ДЦЬдцьЯ' + 'NOPQRSTUVWXYZnopqrstuvwxyz';

var

N, K, X, Y: integer;

begin

// проверяем максимальную длину пароля

if(PWlen > Length(StrTable)) thenK := Length(StrTable)-1

elseK := PWLen;SetLength(result, K); // устанавливаем длину конечной строки

Y := Length(StrTable); // Длина Таблицы для внутреннего цикла

N := 0; // начальное значение цикла

whileN < K do begin// цикл для создания K символов

X := Random(Y) + 1; // берём следующий случайный символ

// проверяем присутствие этого символа в конечной строке

if(pos(StrTable[X], result) = 0) then begin

inc(N); // символ не найден

Result[N] :=StrTable[X]; // теперь его сохраняем

end;

end;

end;

procedureTForm1.Button1Click(Sender: TObject);

var

cPwd: string;

begin

// вызываем функцию генерации пароля из 30 символов

cPwd := RandomPwd(30);

// ...

end;

Проверка ISBN

Delphi 1

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 на одинадцать делится без остатка, расмотренный нами кандидат на ISBN является верным кодом ISBN.

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

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

functionIsISBN(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') thenCheckSum := 10

elseVal(CheckDigit, CheckSum, Err);

{Извлекаем в цикле все цифры из кода ISBN, применяя алгоритм декодирования}

Cnt := 1;

fori := 1 to12 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 MOD11 = 0) thenIsISBN := True

elseIsISBN := False;

end

elseIsISBN := False;

end;

Это примитивный пример, сильно упрощенный для лучшего понимания алгоритма декодирования кода ISBN. В реальной жизни (приложении) имеется немало мелочей, которые необходимо учесть для нормальной работы. Для примера, описанная выше функция требует от кандидата ISBN строку паскалевского типа с дефисами, разделяющими четыре части кода. В качестве дополнительной функциональности можно проверять кандидата ISBNs на наличие дефисов. Другой полезной вещью могла бы быть проверка на наличие трех дефисов на нужных позициях, а не простая проверка на наличие необходимых одиннадцати символов-цифр.

API

Переменные среды

Как раскрыть строки с подстановками вида '%SystemRoot%\IOSUBSYS\'?

Читать дальше
Тёмная тема

Шрифт:

Сбросить

Интервал:

Закладка:

Сделать


Валентин Озеров читать все книги автора по порядку

Валентин Озеров - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Советы по Delphi. Версия 1.4.3 от 1.1.2001 отзывы


Отзывы читателей о книге Советы по Delphi. Версия 1.4.3 от 1.1.2001, автор: Валентин Озеров. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
Большинство книг на сайте опубликовано легально на правах партнёрской программы ЛитРес. Если Ваша книга была опубликована с нарушениями авторских прав, пожалуйста, направьте Вашу жалобу на PGEgaHJlZj0ibWFpbHRvOmFidXNlQGxpYmtpbmcucnUiIHJlbD0ibm9mb2xsb3ciPmFidXNlQGxpYmtpbmcucnU8L2E+ или заполните форму обратной связи.
img img img img img