Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.009 c
15-1144295698
Карелин Артем
2006-04-06 07:54
2006.04.30
Выбор MP3-плеера. На какие параметры смотреть?


2-1144940158
тим
2006-04-13 18:55
2006.04.30
real &amp; integer


15-1144042569
WondeRu
2006-04-03 09:36
2006.04.30
Wiki. Раз сайт никто не хочет приводить в порядок...


2-1145011481
diwww
2006-04-14 14:44
2006.04.30
Как оперировать строками DBGrid-а?


4-1139050152
DSKalugin
2006-02-04 13:49
2006.04.30
межпроцессное взаимодейтсвие





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский