а я для кодирования актуальности ценников кодировал ШК(артикул с ценой) в base58 (для уменьшения размера ШК) в формате bitcoin с проверкой КС вот такими самопальными функциями, если в алгоритме base58 поменять строку символов на другую с другой длиной то будет любая система счисления декодер/энкодер преобразующий в массив байт и просто в число
Функция ПолучитьНибл(Ч)
Возврат Сред("0123456789abcdef",1+Ч%16,1);
КонецФункции
Функция Byte2Hex(с)
Возврат ПолучитьНибл(с/16) + ПолучитьНибл(с);
КонецФункции
Функция Array2Hex(МассивБайт, Разделитель = "")
Стр = "";
Для Каждого Байт из МассивБайт Цикл
Стр = Стр + Byte2Hex(Байт) + Разделитель;
КонецЦикла;
Возврат Стр;
КонецФункции
//bits
Функция УстановитьБит(ч, НомерБита) Экспорт
Если Не СчитатьБит(ч, НомерБита) Тогда
ч = ч + pow(2, НомерБита);
КонецЕсли;
Возврат ч;
КонецФункции
//устанавливаем бит в 0
Функция СброситьБит(ч, НомерБита) Экспорт
если СчитатьБит(ч, НомерБита) Тогда
ч = ч - pow(2, НомерБита);
КонецЕсли;
Возврат ч;
КонецФункции
//если бит 1 тогда истина иначе ложь
Функция СчитатьБит(ч, НомерБита) экспорт
Возврат Цел((ч%pow(2, НомерБита+1))/pow(2, НомерБита)) = 1;
КонецФункции
//Base58
Функция Base58Encode(знач х) Экспорт
Если х = 0 Тогда Возврат "11"; КонецЕсли;
Симв = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";// bitcoin base58 encode
Стр = "";
Base = СтрДлина(Симв);
Пока х > 0 Цикл
б = х % Base;
Стр = Сред(Симв, б+1, 1) + Стр;
х = Цел(х/Base);
КонецЦикла;
Возврат Стр;
КонецФункции
функция Base58Decode(Стр) Экспорт
Симв = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz" ; // bitcoin base58 encode
Base = СтрДлина(Симв);
Стр = СокрЛП(Стр);
д = СтрДлина(Стр);
х = 0;
Для н = 1 По д Цикл
б = Найти(Симв, Сред(Стр, н, 1));
х = (х * Base) + ?(б <= 0, 0, б - 1); //все спецсимволы или нераспознанные интерпретируем как 0
КонецЦикла;
Возврат х;
КонецФункции
Функция Array2Base58(Array)
РезультатБольшоеЧисло = 0;
Для Каждого ЧислоМассива из Array Цикл
РезультатБольшоеЧисло = РезультатБольшоеЧисло * 256 + ЧислоМассива%256;
КонецЦикла;
Возврат ?(Array[0] = 0 ,"1","")+Base58Encode(РезультатБольшоеЧисло);
КонецФункции
Функция Base58Array(Число58)
МассивБайт = Новый Массив();
РезультатБольшоеЧисло = Base58Decode(Число58);
Base = 256;
Пока РезультатБольшоеЧисло > 0 Цикл
Байт = РезультатБольшоеЧисло % Base;
МассивБайт.Добавить(Байт);
РезультатБольшоеЧисло = Цел(РезультатБольшоеЧисло/Base);
КонецЦикла;
Если Лев(Число58,1) = "1" Тогда МассивБайт.Добавить(0); КонецЕсли;
Максимум = МассивБайт.ВГраница();
Для Итератор = 0 По Максимум/2 Цикл
Байт = МассивБайт[Максимум - Итератор];
МассивБайт.Установить(Максимум - Итератор, МассивБайт[Итератор]);
МассивБайт.Установить(Итератор, Байт);
КонецЦикла;
Возврат МассивБайт;
КонецФункции
Функция ПолучитьХэш256(МассивБайт)
Показать