Страницы: 1
RSS
Контрольная сумма строки
 
Есть прайс лист без артикульного номера, решил в экселе формулу сделать, подумал - самый простой способ - контрольная сумма ASCII кодов строки содержащий товар, пробовал вручную с помощью    
=СУММ(КОДСИМВ(B5)+КОДСИМВ(ПСТР(B5;2;ДЛСТР(B5)))...итд до 30 наткнулся на ограничение "слишком сложная формула" а короткие названия товаров ошибки выдают...  
Как ???  
если можно копию на infomanzam[гав]yandex.ru
 
Excel 2003 имеет ограничение на длину формулы - 1000 символов. Excel 2007 - до 8000 символов.    
 
Вообще, у вас забавный способ генерации артикулов. Подозреваю, что он может не обеспечивать уникальности - сумма кодов символов наименований для разных товаров может совпадать.
 
{quote}{login=djgoodwin}{date=15.09.2007 10:15}{thema=Контрольная сумма строки}{post}Есть прайс лист без артикульного номера, решил в экселе формулу сделать, подумал - самый простой способ - контрольная сумма ASCII кодов строки содержащий товар, пробовал вручную с помощью    
=СУММ(КОДСИМВ(B5)+КОДСИМВ(ПСТР(B5;2;ДЛСТР(B5)))...итд до 30 наткнулся на ограничение "слишком сложная формула" а короткие названия товаров ошибки выдают...  
Как ???  
если можно копию на infomanzam[гав]yandex.ru{/post}{/quote}
 
ну, ещё можно (и лучше) использовать пользовательскую функцию. Как в ней получать контрольную сумму - вариантов бесконечно. Вот, например, в приложенном примере это делается через вычисление CRC32 - вероятность коллизий есть - но ОЧЕНЬ маленькая (по теории вероятности одно на 2 миллиарда). Ещё преимущество такого способа - что его легко повторить на любом языке программирования (и есть уже куча утилит, которые считают CRC32) - т.е. обеспечивается какая-никакая совместимость.  
Хотя, безусловно, Николай Павлов прав - вычислять артикулярный номер - это нонсенс. Хотя бы по тому, что в настоящем артикле закладывает к какой группе товаров относится конкретный товар. и ещё - учтите такой нюанс - при вычислении контрольной суммы в моём примере учитывается регистр, пробелы и т.д. - т.е. "Ботинки муж" и "Ботинки  муж" будут иметь разные контрольные суммы.  
 
удачи.  
 
 
p.s. копию файла на почту отправил.
 
на форуме стоит движок, оптимизирующий пробелы...  
поэтому "Ботинки муж" получились одинаковые... ;-)))  
ну тогда так (подчёркивание - это пробел)  
"Ботинки_муж" и "Ботинки__муж" будут иметь разные вычисленные контрольные суммы.
 
{quote}{login=Serge Bliznykov}{date=16.09.2007 10:18}{thema=Re: Контрольная сумма строки}{post}{quote}{login=djgoodwin}{date=15.09.2007 10:15}{thema=Контрольная сумма строки}{post} в приложенном примере это делается через вычисление CRC32 - вероятность коллизий есть - но ОЧЕНЬ маленькая (по теории вероятности одно на 2 миллиарда).{/post}{/quote}  
К сожалению, для больших таблиц вероятность коллизии резко повышается в силу парадокса дней рождения:  
http://ru.wikipedia.org/wiki/Парадокс_дня_рождения  
 
К примеру, при размере прайса в 10000 записей и использовании в качестве хеш-функции CRC32 (4 млрд. значений) вероятность нарваться на коллизию - более 1%.
 
{quote}{login=andy1618}{date=17.09.2007 01:09}{thema=Re: Re: Контрольная сумма строки}{post}  
К примеру, при размере прайса в 10000 записей и использовании в качестве хеш-функции CRC32 (4 млрд. значений) вероятность нарваться на коллизию - более 1%.{/post}{/quote}  
ну, пользователь (вопрошавший) уже вроде как удовлетворён...  
В принципе, я с Вами согласен. Можно это дело (уникальность) подкрепить искусственным введением в артикул первой буквы названия и, например, длины строки,  
тогда это будет выглядеть так:  
"Ботинки мужские" Артикул: Б15-A2776872  
А вообще - никто не мешает автору вопроса взять свой РЕАЛЬНЫЙ прайс - и проверить нет ли одинаковых артикулов для разных строчек (Excel -> Access и там буквально один select ...
 
{quote}{login=Serge Bliznykov}{date=17.09.2007 10:32}{thema=Re: Re: Re: Контрольная сумма строки}{post}Можно это дело (уникальность) подкрепить искусственным введением в артикул первой буквы названия и, например, длины строки,  
тогда это будет выглядеть так:  
"Ботинки мужские" Артикул: Б15-A2776872{/post}{/quote}  
Да, мысль про первую букву и длину строки вполне удачная. Кстати, поскольку всё равно придётся обрабатывать ситуации коллизий (вручную или автоматически), то можно артикул укоротить - оставить от CRC32, к примеру, первые 5-6 символов (лучше - не шестнадцатиричных, а десятичных, чтобы не путаться в кодировках). В комбинации с префиксами вида "Б15-" будет выглядеть вполне достойно.
Страницы: 1
Читают тему
Наверх