Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
 А кто-нибудь знает подробности SYS(2007)?  [new]
neznajka
Member

Откуда: Украина
Сообщений: 387
Привет всем!
По какому принципу рассчитывается контрольная сумма в SYS(2007)? В Хелпе такого не нашел. Может, это секрет Мелкософта? Это я к тому, насколько уникальные значения можно получить через SYS(2007)...
7 дек 04, 23:58    [1165327]     Ответить | Цитировать Сообщить модератору
 Re: А кто-нибудь знает подробности SYS(2007)?  [new]
Дмитрий Маликов
Member

Откуда: Новосибирск
Сообщений: 179
The SYS(2007) function returns the checksum value of the character expression <expC>. The correct syntax is SYS(2007,<expC>). A checksum can be used to test the validity of data or [b]to compare two character expressions.[/b] 

NOTE: Checksum is a "byte-oriented CRC-16" algorithm. The exact logic was last published in the February 1986 edition of "Dr. Dobbs Journal." 
8 дек 04, 06:38    [1165421]     Ответить | Цитировать Сообщить модератору
 Re: А кто-нибудь знает подробности SYS(2007)?  [new]
oleg_km
Member

Откуда:
Сообщений: 161
CRC-16 на очень маленькой выборке дает одинаковые значения. Точные цифры не скажу, но как-то пробовал на небольшом файле с уникальным символьным полем высчитать SYS(2007) и потом нашел очень много дублей и даже "триблей". Поэтому сейчас использую MD5. Пока дублей не было. Все это голая практика, если кто знает теорию - подскажите.
8 дек 04, 09:20    [1165577]     Ответить | Цитировать Сообщить модератору
 Re: А кто-нибудь знает подробности SYS(2007)?  [new]
Vladimir M Sklyar
Member

Откуда: Украина, Конотоп
Сообщений: 649

Поделись как ты прикрутил MD5 к фоксу.

Posted via ActualForum NNTP Server 1.1

8 дек 04, 09:58    [1165692]     Ответить | Цитировать Сообщить модератору
 Re: А кто-нибудь знает подробности SYS(2007)?  [new]
neznajka
Member

Откуда: Украина
Сообщений: 387
To Дмитрий Маликов:
Благодарю за информацию. Теперь буду знать, где смотреть.
To oleg_km:
Согласен с Vladimir M Sklyar - поподробней, если можно...
8 дек 04, 12:09    [1166306]     Ответить | Цитировать Сообщить модератору
 Re: А кто-нибудь знает подробности SYS(2007)?  [new]
oleg_km
Member

Откуда:
Сообщений: 161
См. приложение

К сообщению приложен файл (md5.rar - 29Kb) cкачать
9 дек 04, 09:25    [1168702]     Ответить | Цитировать Сообщить модератору
 Re: А кто-нибудь знает подробности SYS(2007)?  [new]
neznajka
Member

Откуда: Украина
Сообщений: 387
To oleg_km:
Скачал. Спасибо. Интересно.
10 дек 04, 14:12    [1174076]     Ответить | Цитировать Сообщить модератору
 Re: А кто-нибудь знает подробности SYS(2007)?  [new]
Igor Korolyov
Member

Откуда: Гомель, Беларусь
Сообщений: 2512

Hi neznajka!

Ну уже по определению SYS(2007) (без дополнительных параметров добавленыых в
VFP8) может выдать лишь 65535 разных значений - чего-же от него ожидать то
:) Конечно будут повторения - достаточно задать > 65535 разных комбинаций,
чтобы 100% получить повторение :) реально повторения начнутся гораздо
раньше - но я уже подзабыл эту математику, потому не скажу более точно...

Posted via ActualForum NNTP Server 1.1

16 дек 04, 03:31    [1184260]     Ответить | Цитировать Сообщить модератору
 Re: А кто-нибудь знает подробности SYS(2007)?  [new]
neznajka
Member

Откуда: Украина
Сообщений: 387
To Igor Korolyov:
Да я и сам это понимаю - формулы перестановок и сочетаний еще слегка помню. Из этих же формул, кстати, следует и неизбежная повторяемость MD5-кодирования, правда - "петля" повторений очень большая...
16 дек 04, 17:02    [1186632]     Ответить | Цитировать Сообщить модератору
 Re: А кто-нибудь знает подробности SYS(2007)?  [new]
Igor Korolyov
Member

Откуда: Гомель, Беларусь
Сообщений: 2512

Hi neznajka!

Ну да - таковы ВСЕ хэш-алгоритмы - просто число возможных выходных значений,
а также собственно то как "перемешиваются" исходные данные влияет на
вероятность повторения.

Posted via ActualForum NNTP Server 1.1

17 дек 04, 02:39    [1187537]     Ответить | Цитировать Сообщить модератору
 Re: А кто-нибудь знает подробности SYS(2007)?  [new]
neznajka
Member

Откуда: Украина
Сообщений: 387
To Igor Korolyov:
Да меня-то эта тема больше из любопытства занимала - познакомиться с теорией, чтобы "уразуметь": можно ли организовать MD5-алгоритм средствами VFP? Но, благодаря oleg_km, пришел к выводу, что и делать-то это, по сути, НЕзачем - ведь все прекрасно подшивается под Fox, без особого напряга. Теперь у меня на повестке дня другая проблема - реорганизация структур нескольких БД в целях более рационального (компактного) размещения строчных полей, содержащих данные, длина которых колеблется в значительных пределах - от 12 до 149 символов (например, названия фирм). Не все, оказывается, можно решать через memo, особенно при необходимости вести индексный поиск по такому полю. Но это - выходит за рамки данной темы. А начинать новую - пока не стОит, сначала посоображаю немного сам.
17 дек 04, 15:36    [1189654]     Ответить | Цитировать Сообщить модератору
 Re: А кто-нибудь знает подробности SYS(2007)?  [new]
karly™
Guest
Пример организации словаря для поиска по отдельным словам здесь
Вполе работоспособная модель в том числе для memo-полей
17 дек 04, 18:29    [1190247]     Ответить | Цитировать Сообщить модератору
 Re: А кто-нибудь знает подробности SYS(2007)?  [new]
Igor Korolyov
Member

Откуда: Гомель, Беларусь
Сообщений: 2512

Hi neznajka!

Я не знаю чего тебе oleg_km прислал (через NNTP только ссылка видна, потому
я не закачал) - что-то меня смущает цифра в 29 Кб - чего он туда напихал
непонятно :)
Вообще-то MD5 получается средствами винды в пару десятков строк кода, даже
со всякими излишними проверками :)

? GetMd5Hash("Привет!")

FUNCTION GetMd5Hash
LPARAMETERS tcInput
#DEFINE dnPROV_RSA_FULL 1
#DEFINE dnCALG_MD5      0x8003
#DEFINE dnHP_HASHVAL    0x0002
DECLARE INTEGER CryptAcquireContext IN WIN32API INTEGER @, STRING, STRING, 
INTEGER, INTEGER
DECLARE INTEGER CryptCreateHash IN WIN32API INTEGER, INTEGER, INTEGER, 
INTEGER, INTEGER @
DECLARE INTEGER CryptHashData IN WIN32API INTEGER, STRING, INTEGER, INTEGER
DECLARE INTEGER CryptGetHashParam IN WIN32API INTEGER, INTEGER, STRING @, 
INTEGER @, INTEGER
DECLARE INTEGER CryptDestroyHash IN WIN32API INTEGER
DECLARE INTEGER CryptReleaseContext IN WIN32API INTEGER, INTEGER
LOCAL lnProviderHandle, lnHashHandle, lcHash, lnHashLen
lnProviderHandle = 0
lnHashHandle = 0
lcHash = SPACE(16)
lnHashLen = 16
IF CryptAcquireContext(@m.lnProviderHandle, "", "", dnPROV_RSA_FULL, 
0xF0000000) = 0
 ERROR "Ошибка получения CryptoAPI контекста"
 RETURN ""
ENDIF
IF CryptCreateHash(m.lnProviderHandle, dnCALG_MD5, 0, 0, @m.lnHashHandle) = 
0
 ERROR "Ошибка создания хендла хеша"
 CryptReleaseContext(m.lnProviderHandle, 0)
 RETURN ""
ENDIF
IF CryptHashData(m.lnHashHandle, m.tcInput, LEN(m.tcInput), 0) = 0
 ERROR "Ошибка хеширования"
 CryptDestroyHash(m.lnHashHandle)
 CryptReleaseContext(m.lnProviderHandle, 0)
 RETURN ""
ENDIF
IF CryptGetHashParam(m.lnHashHandle, dnHP_HASHVAL, @m.lcHash, @m.lnHashLen, 
0) = 0
 ERROR "Ошибка получения хеша"
 CryptDestroyHash(m.lnHashHandle)
 CryptReleaseContext(m.lnProviderHandle, 0)
 RETURN ""
ENDIF
CryptDestroyHash(m.lnHashHandle)
CryptReleaseContext(m.lnProviderHandle, 0)
RETURN LOWER(STRCONV(m.lcHash, 15))
ENDFUNC

Теперь у меня на повестке дня другая проблема - реорганизация структур
нескольких БД в целях более рационального (компактного) размещения строчных
полей

А какая цель? Чтоб места меньша занимало? (сколько ж у тебя записей то?) Или
чтобы быстрее работало? В принципе если тебя уже достают такие проблемы, то
наверное пора переходить на какой-нить SQL сервер - ибо в фоксе нереально
сделать красивую и быструю эмуляцию VARCHAR полей...

Posted via ActualForum NNTP Server 1.1

18 дек 04, 23:53    [1191411]     Ответить | Цитировать Сообщить модератору
 Re: А кто-нибудь знает подробности SYS(2007)?  [new]
oleg_km
Member

Откуда:
Сообщений: 161
Ровно это и запихал. Просто была чья-та dll ну и она естественно меньше 29kb быть не может.
19 дек 04, 14:19    [1191684]     Ответить | Цитировать Сообщить модератору
 Re: А кто-нибудь знает подробности SYS(2007)?  [new]
Igor Korolyov
Member

Откуда: Гомель, Беларусь
Сообщений: 2512

Hi oleg_km!

Фоксовая dll с таким кодом? А чего тогда не исходник кинул?

Posted via ActualForum NNTP Server 1.1

19 дек 04, 21:36    [1191993]     Ответить | Цитировать Сообщить модератору
 Re: А кто-нибудь знает подробности SYS(2007)?  [new]
oleg_km
Member

Откуда:
Сообщений: 161
Да какая фоксовая. На сях, наверное. Это не моя, скачал где-то. Моя внутри моей dll, но она большая, лень выдирать
20 дек 04, 12:41    [1193005]     Ответить | Цитировать Сообщить модератору
 Re: А кто-нибудь знает подробности SYS(2007)?  [new]
neznajka
Member

Откуда: Украина
Сообщений: 387
Спасибо всем за участие. Не ожидал, честно говоря. Кодировка в системе MD5 мне очень пригодилась. Но не для данного случая. По уточненным условиям – здесь необходимо было:
- организовать компактное хранение строчных данных, имеющих значительный разброс длины;
- вести по ним ИНДЕКСНЫЙ поиск:
- также вести поиск по шаблону с применением % и _ ;
- и еще масса дополнительных условий…
Короче, для решения данной проблемы оказалось недостаточно возможностей организации хранения данных в виде плоских таблиц. Пришлось (для данного случая) отказаться от DBF-формата и вообще использовать Adaptive Server Anywhere от SYBASE. Но – это, действительно, частный случай, который я не хочу здесь описывать, поскольку являюсь ярым приверженцем FOX’а.
И ссылка от karly™ (http://www.foxclub.ru/sol/index.php?act=view&id=443) действительно оказалась полезной. Большое спасибо. Прошу считать тему закрытой. Если, конечно, ни у кого нет личного интереса в продолжении.
Удачи!
С уважением,
Третьяченко Николай, aka Neznajka.
20 дек 04, 15:33    [1193909]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить