Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Контрольная сума [D6, D7]


Dest81 ©   (2006-04-13 14:53:00) 

Из базы данных по одному ID полю выбираються данные (тип integer) и сохраняються в текстовом файле!
как можно проконтролировать чтоб недобавляли вручную никакие даные? текстовый файл обязателен!
Я что-то слышал про контрольную суму - только что это и как осуществить незнаю!


Kolan   (2006-04-14 10:46:00) [1]

tesseract ©   (13.04.06 19:31) [9]

Алгоритм генерации LRC:
1. Сложить все байты сообщения, исключая стартовый символ ':' и конечные CRLF, складывая их так, чтобы перенос отбрасывался.
2. Отнять получившееся значение от числа FF(Hex) - это является первым дополнением.
3. Прибавить к получившемуся значению 1 - это второе дополнение.


Сделал четко по этому описанию. Зато код понятнее. Мне по крайней мере.
Сказано 3 пункта вот пожалуйсто все три...
Ненадо годать. Это ИМХО :)


Dest81   (2006-04-14 10:25:00) [2]

Че за Агуров и где его читать?


Rial   (2006-04-13 19:50:00) [3]

P.S.
Type TVoidArray=Array[0..0]of Byte;
    ptVoidArray=^TVoidArray;


Забыл


Rial   (2006-04-13 19:49:00) [4]

xdsControlSumm=#142#58#92#2#189#106#218#28#26#89#53#248#43#124#182#214+
                    #52#13#207#19#111#211#80#81#167#221#169#255#239#177#21#79;

function ControlSummString(Const Data:Pointer;Const DataSize:Integer;SummSize:Integer):String;
Var ptData,ptSumm,ptV:ptVoidArray;
   I,R,J:Integer;
begin
ptData:=Data;
If (SummSize>DataSize)then SummSize:=DataSize;
GetMem(ptSumm,SummSize);
Try
 For I:=0 to SummSize-1 do ptSumm^[I]:=0;
 I:=DataSize;
 Repeat
  If (I>SummSize)then R:=SummSize
                 else R:=I;
  Dec(I,R);
  ptV:=@ptData^[I];
  For J:=0 to R-1 do ptSumm^[J]:=ptSumm^[J] xor ptV^[J];
 Until (I<=0);
 XorData(ptSumm,SummSize,xdsControlSumm);
 Result:=PerformDataToString(ptSumm,SummSize);
Finally
 FreeMem(ptSumm);
end;
end;


tesseract   (2006-04-13 19:31:00) [5]


> Result := $FF - Result;
> Result := Result + 1;


REsult:=-result;

равносильно. Читай Агурова до конца :-)


Kolan   (2006-04-13 16:10:00) [6]

Удалено модератором
Примечание: Личная переписка


Dest81   (2006-04-13 16:01:00) [7]

Удалено модератором
Примечание: Личная переписка


Kolan   (2006-04-13 15:54:00) [8]

1. Допустип преобразуем каждую строку в число функцией IntToStr()
И сохраняем в массив байт - это не обязательно можно сразу использовать, просто у меня есть пример с массивом...

Далее используем такую ф-цию:
function TForm1.EvalControlSumm(Sourse: TByteArray): Byte;
var
 I: Integer;
begin
 Result := 0;
 for I := Low(Sourse) to High(Sourse) do
 begin
   Result := Result+ Sourse[I];
 end;
 Result := $FF - Result;
 Result := Result + 1;
end;


В результате она выдаст число типа Byte
Записываем его в конец файла.

2. Берем файл с КС. Делаем все тоже самое но последнюю строку не используем
Те было

45
34
65
Ты подсчитал и записал КС. Стало
45
34
65
34<- Это КС.

Теперь считаем КС для

45
34
65

34

И сравниваем Последнюю строку с Подсчитаной КС если равны то все ОК


Dest81   (2006-04-13 15:47:00) [9]

1).

> Далее берешь докумет который надо проверить, считаешь его
> КС
> все ОК

Как почитать КС Документа
2).
и например данные выглядят в файле так

45
34
65

как посчитать КС объясни подробно на этом примере, пожалуйста!


Kolan   (2006-04-13 15:41:00) [10]

Кода чего. Что не ясно уточни..


Dest81   (2006-04-13 15:39:00) [11]

Можно какуюто статейку или кусок кода?


Kolan   (2006-04-13 15:32:00) [12]

1. Сложить все байты сообщения, исключая стартовый символ ':' и конечные CRLF, складывая их так, чтобы перенос отбрасывался.

Понимай как
Сложить все байты так, чтобы перенос отбрасывался.


Kolan   (2006-04-13 15:22:00) [13]

Обработай данные по какому- нибудь алгоритму например LRC. И сохрани результат например в конце файла - это и есть КС.

Далее берешь докумет который надо проверить, считаешь его КС сравниваешь с сохраненной в нем КС если совпали значит все ОК

Алгоритм генерации LRC:
1. Сложить все байты сообщения, исключая стартовый символ ':' и конечные CRLF, складывая их так, чтобы перенос отбрасывался.
2. Отнять получившееся значение от числа FF(Hex) - это является первым дополнением.
3. Прибавить к получившемуся значению 1 - это второе дополнение.


Наверх

Титульная страница Поиск, карта сайта Написать письмо