Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.04.30;
Скачать: CL | DM;

Вниз

Контрольная сума   Найти похожие ветки 

 
Dest81 ©   (2006-04-13 14:53) [0]

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


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

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

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

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


 
Kolan ©   (2006-04-13 15:32) [2]

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

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


 
Dest81 ©   (2006-04-13 15:39) [3]

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


 
Kolan ©   (2006-04-13 15:41) [4]

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


 
Dest81 ©   (2006-04-13 15:47) [5]

1).

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

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

45
34
65

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


 
Kolan ©   (2006-04-13 15:54) [6]

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 16:01) [7]

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


 
Kolan ©   (2006-04-13 16:10) [8]

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


 
tesseract ©   (2006-04-13 19:31) [9]


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


REsult:=-result;

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


 
Rial ©   (2006-04-13 19:49) [10]

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;


 
Rial ©   (2006-04-13 19:50) [11]

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


Забыл


 
Dest81 ©   (2006-04-14 10:25) [12]

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


 
Kolan ©   (2006-04-14 10:46) [13]

tesseract ©   (13.04.06 19:31) [9]

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


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



Страницы: 1 вся ветка

Текущий архив: 2006.04.30;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.025 c
15-1144333412
oldman
2006-04-06 18:23
2006.04.30
Если память не изменят...


1-1143313487
Kolan
2006-03-25 22:04
2006.04.30
Приведение и сравнение типов.


15-1144682254
rolex2002
2006-04-10 19:17
2006.04.30
помогите с информатикой


6-1137064976
Dark Lord
2006-01-12 14:22
2006.04.30
Проблема с динамическим WebBrowser


3-1141306264
Dosfalcon
2006-03-02 16:31
2006.04.30
Извлечение системного номера записи DBF