хеш в 16 символов #707592


#0 by Zixxx
Как правильнее получить уникальный хеш длиной в 16 символов из уникального идентификатора 1с? Необходимо для интеграции. Есть скрипты для кодирования по алгоритму они возвращают хеш в 32 символа, есть что-нибудь похожее для хеша в 16 символов. И на сколько правильно будет брать первые 16 символов от 1с-ного идентификатора?
#1 by МихаилМ
берите не первые, а случайные 16
#2 by Armando
Я для штрихкода CODE128 до 20 ужимал. Про 16 не слышал.
#3 by DirecTwiX
Бери первые 16 из хеша для "кодирования по алгоритму". Либо сложи посимвольно две половины. Первые 16 символов от УИД тоже как хэш должны пойти. Посчитать хэш для журнала документов, сгруппировать и посмотреть разброс совпадений.
#4 by DirecTwiX
И да, из УИДа логично брать только символы - без скобок и дефисов.
#5 by Serginio1
Неправильно. Вообще Хэш это либо байтовый масив либо uint или UInt64 Можно проиксорить 2 части либо например взять пример вычисления хэша для строки public override unsafe int GetHashCode {     } }
#6 by ptiz
"они возвращают хеш в 32 символа" - может я чего-то не понял, но изначально УИД в 1С как раз - 32 символа.
#7 by DirecTwiX
Ммм.. Что неправильного увидел?) Хешем может быть почти всё, что на ум придёт. Один символ, одна цифра и т.д. УИД - не очень под хеш подходит, т.к. он уникальный) Но тут уже лучше автора спросить, зачем ему понадобился хеш как таковой)
#8 by Serginio1
Хэш это набор бит. Смысл его в том, что бы перемешать биты и уменьшить емкость значения при этом получить минимальную вероятность появления коллизий разных значений с одинаковым хэшем. Или Хеширование (иногда «хэширование», англ. hashing) — преобразование по детерминированному алгоритму входного массива данных произвольной длины в выходную битовую строку фиксированной длины. Такие преобразования также называются хеш-функциями или функциями свёртки, а их результаты называют хешем, хеш-кодом или сводкой сообщения (англ. message digest). Хорошая хеш-функция должна удовлетворять двум свойствам: минимизировать количество коллизий УИД неуникален. Есть вероятность коллизий. А так ему видно хочется уменьшить разрядность хэша
#9 by Torquader
Что-то мне кажется, что если символ - это байт, то 16 байт - это и есть GUID.
#10 by Zixxx
Для интеграции доков, у получающей стороны ID = 16 символов
#11 by ptiz
Заведи справочник УИДов. Код справочника будет хешем.
#12 by Lama12
Прислушайся к это самый лучший вариант.
#13 by Zixxx
, Ну так-то да, решение вроде хорошее
#14 by spock
В какие-то крайности вас понесло! Все давно придумано:
#15 by DirecTwiX
УИД неуникален? Как так получилось? Разве он не на то и УИД, что уникальный?)
#16 by DirecTwiX
И ты так и не ответил на вопрос, что неправильного в увидел. Либо я не заметил ответа) >минимизировать количество коллизий Нет же)
#17 by Serginio1
Хотя уникальность каждого отдельного GUID не гарантируется, общее количество уникальных ключей настолько велико (2128 или 3,4028?1038), что вероятность того, что в мире будут независимо сгенерированы два совпадающих ключа, крайне мала. В 1С с их генерацией УИД вероятность больше
#18 by Serginio1
Неправильно брать первые 16 символов. Нужно брать все 32 хэшировать их в 12 байт и переводить в Base64. Вот так будет правильно. Тогда вероятность коллизий резко уменьшится. Но для его задачи лучше всего 11
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С