Форум: "Начинающим";
Текущий архив: 2006.04.30;
Скачать: [xml.tar.bz2];
ВнизКонтрольная сума Найти похожие ветки
← →
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
6534
<- Это КС.
Теперь считаем КС для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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.009 c