|
Что это за UUID вида YsEgMwVEh4mwuHax? И как его генерить? | ☑ | ||
---|---|---|---|---|
0
Гений 1С
гуру
24.06.20
✎
11:31
|
Что это вообще за UUID? Используется в интернет-магазинах типа Мегашоп.
Я так понимаю 16 случайных букв из алфавита 01...9A..Za...z. Т.е. система счисления 74-ричная. Этот идентификатор шире GUID. Но наверное просто 16 случайных цифр - это ненадежно. Надо его генерить из GUID, наверное, где тоже 16 знаков, но система счисления 16-ричная. Как правильно сгенерить такой UUID, собственно? Просто сгенерить GUID и конвертануть его в 74-ричную систему счисления? |
|||
1
Гений 1С
гуру
24.06.20
✎
11:34
|
т.е. сайты типа Megagroup, пардон
|
|||
2
acht
24.06.20
✎
11:35
|
Убийцу Megagroup проектируешь?
|
|||
3
RomanYS
24.06.20
✎
11:35
|
(0) Используй просто GUID без конвертации
|
|||
4
АНДР
24.06.20
✎
11:35
|
Почему не ограничиться 1Совским, если он - подмножество?
|
|||
5
d4rkmesa
24.06.20
✎
11:38
|
(0) Судя по описанию обмена megagroup, можно просто (3) .
|
|||
6
acht
24.06.20
✎
11:49
|
(0) > Этот идентификатор шире GUID.
GUID = 128 бит, 32 позиции по 16 вариантов = 16^32 вариантов = 3.4028237e+38 Этот идентификатор = 16 символов по 74 варианта = 74^16 вариантов = 8.0855118e+29 3.4028237e+38 > 8.0855118e+29 Ну так, для образования |
|||
7
Гений 1С
гуру
24.06.20
✎
11:54
|
(3) (4) Блин, коллеги, точняк. че-то я туплю с утра. можно просто ГУИД юзать, точно.
|
|||
8
Гений 1С
гуру
24.06.20
✎
11:54
|
(2) не, обмен с Megagroup для клиента пилю по схеме: https://v8.1c.ru/tekhnologii/obmen-dannymi-i-integratsiya/standarty-i-formaty/protokol-obmena-s-saytom/
|
|||
9
Гений 1С
гуру
24.06.20
✎
12:48
|
А, блин, засада. GUID то имеет длину 32 символа....
|
|||
10
RomanYS
24.06.20
✎
12:49
|
(9) отрежь половину
|
|||
11
Полован
24.06.20
✎
13:02
|
(9) Пилять.. Сделай хэш GUID и не капай людям на мозги.
|
|||
12
RomanYS
24.06.20
✎
13:05
|
(0) интересно, а откуда вообще "74ричная" взялась?
10+2*26=62 |
|||
13
Гений 1С
гуру
24.06.20
✎
13:06
|
(12) да, пардон. че-то 32 буквы посчитал
|
|||
14
Serginio1
24.06.20
✎
13:39
|
(9) https://ru.wikipedia.org/wiki/GUID это 16 байт. 32 это Hex представление/
Похоже на Base64 https://ru.wikipedia.org/wiki/Base64 |
|||
15
Гений 1С
гуру
24.06.20
✎
13:45
|
(14) да, точно, похоже на Base64, спасибо.
|
|||
16
Гений 1С
гуру
28.09.20
✎
13:37
|
Короче, в итоге сделал так:
Функция СгенерироватьUUID() Экспорт АлфавитUUID = "0123456789" + "abcdefhgijklmnopqrstuvwxyz" + "ABCDEFHGIJKLMNOPQRSTUVWXYZ"; АлфавитГУИД = "0123456789abcdef"; СтрГУИД = Строка(Новый УникальныйИдентификатор()); //36 символов Число = ПереводИзСистемыСчисленияВЧисло(СтрГУИД, СтрДлина(АлфавитГУИД), АлфавитГУИД); Результат = ПереводЧислаВСистемуСчисления(Число, СтрДлина(АлфавитUUID), АлфавитUUID); //Выравниваем до 22 Пока СтрДлина(Результат) < 22 Цикл Результат = Результат + "0"; КонецЦикла; Возврат Результат; КонецФункции Функция ПереводЧислаВСистемуСчисления(Знач Значение=0, Нотация=36, СтрокаСистемы="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ") Экспорт //Назначение: Переводит число Значение в строку в заданной системе счисления (Нотация) используя строку знаков этой системы СтрокаСистемы //ДатаСоздания: 20071127 //Автор: AVB //Редактор: Fixin //Тестирована: Да //Описание: // За основу взят алгоритм avb Если Нотация<=0 Тогда Возврат "" КонецЕсли; Если Значение<=0 Тогда Возврат "0" КонецЕсли; Значение=Цел(Значение); Результат=""; Пока Значение>0 Цикл Результат=Сред(СтрокаСистемы,Значение%Нотация+1,1)+Результат; Значение=Цел(Значение/Нотация) ; КонецЦикла; Возврат Результат; КонецФункции Функция ПереводИзСистемыСчисленияВЧисло(Знач Значение="",Нотация=36, СтрокаСистемы="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ") Экспорт //Назначение: Переводит строку Значение в заданной системе счисления (Нотация) в число используя строку знаков этой системы СтрокаСистемы //ДатаСоздания: 20071127 //Автор: AVB //Редактор: Fixin //Тестирована: Да //Описание: // За основу взят алгоритм avb Перем База, Р; База=1; Р=0; Всего=СтрДлина(Значение); Для Инд=1 ПО Всего Цикл Симв=Сред(Значение, Всего-инд+1, 1); Поз=Найти(СтрокаСистемы, ВРЕГ(Симв)); Если Поз>0 Тогда Р=Р+(Поз-1)*База; База=База*Нотация; КонецЕсли; КонецЦикла; Возврат Р; КонецФункции |
|||
17
Гений 1С
гуру
28.09.20
✎
13:39
|
ГУИД: 44e06570-e340-4195-bbf1-38c1db51b67f
Число: 82 236 895 033 685 703 638 733 159 Результат: 00000006D7NBOkGRmA5EYD |
|||
18
Ненавижу 1С
гуру
28.09.20
✎
13:55
|
ПереводИзСистемыСчисленияВЧисло
Зачем Нотация, если по длине строки ее можно определить? |
|||
19
Ненавижу 1С
гуру
28.09.20
✎
13:55
|
и не "нотация", а основание
|
|||
20
mistеr
28.09.20
✎
14:01
|
(0) Вряд ли это UUID. Скорее всего, какой-то хэш от обычного внутреннего Номера.
>YsEgMwVEh4mwuHax >Hax Как бы намекает, что простому 1С-нику с ним не справиться. |
|||
21
МихаилМ
28.09.20
✎
14:11
|
зачем же так сложно:
в 1с8 есть встроенная ф-ции работы с BASE64. |
|||
22
МихаилМ
28.09.20
✎
15:03
|
я бы сделал красивее
тк 16- ричная и 64- ричная система сопоставимы без преобразования в число сделал сопоставление. думаю раз в 100 работало бы быстрее. |
|||
23
Гений 1С
гуру
29.09.20
✎
08:12
|
(22) а с чего вы решили, что там важна скорость? Или вы хотите раздуть бюджет клиенту ради мнимой "скорости"?
|
|||
24
Гений 1С
гуру
29.09.20
✎
08:13
|
(18) буквоедство детектед.
|
|||
25
Гений 1С
гуру
29.09.20
✎
08:13
|
(20) он используется как идентификатор, всё норм. это именно ID
|
|||
26
NorthWind
29.09.20
✎
08:19
|
(21) если закодить GUID как текст, результирующая строка в Base64 выйдет длиннее чем ему требуется. А если ее тупо обрезать, может уникальность пострадать.
|
|||
27
sTOd
29.09.20
✎
08:35
|
Ну воот, я что такое Megagroup то не знаю, а его сейчас какой-то 1Сник ещё и убъёт. Распоясались, панимаишь!
|
|||
28
Кирпич
29.09.20
✎
10:08
|
16 байт в 16 читабельных символов не запихнешь. Где написано, что ID должен быть длиной 16? Может просто GUID вставлять и не париться?
|
|||
29
mistеr
29.09.20
✎
11:54
|
(25) Я не спорю, что используется. Просто поясняю, что на сайтах обычно делают именно так. ИД-шники из базы наружу просто так не отдают, чтобы не подбирали. Делается некое обратимое преобразование, назовем его хэш. Когда в запросе сайт получает этот хэш, делается обратное преобразование, получается ИД-шник, по нему из базы вытаскивается объект.
Если ты туда пихнешь что-то рандомное, то обратное преобразование от него даст несуществующий ID или ошибку. |
|||
30
Гений 1С
гуру
30.09.20
✎
08:01
|
(29) "обычно"? в моем случае они отдают и голый ID. Но вот обмен по Commerce ML с этим сайтом по ID не работает, надо UUID юзать.
|
|||
31
Кирпич
30.09.20
✎
08:35
|
(30) ну так ты спросил бы у тех, кому этот UUID нужен, как его делать
|
|||
32
Гений 1С
гуру
30.09.20
✎
10:37
|
(31) у кого это? У клиента? Они не в зуб ногой. ;-)
|
|||
33
Гений 1С
гуру
30.09.20
✎
10:38
|
(31) но тащем-та я протестировал на самостоятельно сгенерированных UUID, обмен по ним идет. Т.е. они не кэшируют какой-либо ИД, а являются собственно идентификаторами. Теперь я понял, что ты имеешь ввиду.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |