|
4461 | 4461 | Возврат КонструкторЦвета(0, 0, 0); |
4462 | 4462 | КонецЕсли; |
4463 | 4463 |
|
| 4464 | +#Если Сервер Тогда |
4464 | 4465 | Хеш = Новый ХешированиеДанных(ХешФункция.CRC32); |
4465 | 4466 | Хеш.Добавить(Строка); |
4466 | 4467 | ХешСтроки = Хеш.ХешСумма; |
| 4468 | +#Иначе |
| 4469 | + ХешСтроки = КонтрольнаяСумма(Строка); |
| 4470 | +#КонецЕсли |
4467 | 4471 |
|
4468 | 4472 | Индекс = ХешСтроки % КаталогЦветов.Количество(); |
4469 | 4473 |
|
4470 | 4474 | Если ТипЗнч(КаталогЦветов) = Тип("Соответствие") Тогда |
4471 | | - Таблица = СоответствиеВТаблицуЗначений(КаталогЦветов); |
4472 | | - Результат = АбсолютныйЦвет(Таблица[Индекс].Значение); |
| 4475 | + Массив = СоответствиеВМассив(КаталогЦветов); |
| 4476 | + Результат = АбсолютныйЦвет(Массив[Индекс]); |
4473 | 4477 | ИначеЕсли ТипЗнч(КаталогЦветов) = Тип("Массив") Тогда |
4474 | 4478 | Результат = АбсолютныйЦвет(КаталогЦветов[Индекс]); |
4475 | 4479 | Иначе |
|
5143 | 5147 |
|
5144 | 5148 | КонецФункции |
5145 | 5149 |
|
5146 | | -// Преобразует Соответствие в ТаблицаЗначений |
| 5150 | +// Числовое представление строки. Любую строку превращает в Число, которое соответствует строке. |
| 5151 | +// Используется контрольная сумма Флетчера https://ru.wikipedia.org/wiki/Контрольная_сумма_Флетчера |
5147 | 5152 | // |
5148 | 5153 | // Параметры: |
5149 | | -// Соответствие - Соответствие из КлючЗначение - исходной соответствие |
| 5154 | +// Строка - Строка - исходная строка. |
5150 | 5155 | // |
5151 | 5156 | // Возвращаемое значение: |
5152 | | -// ТаблицаЗначений - Соответствие в таблицу значений: |
5153 | | -// * Ключ - Строка - представление цвета |
5154 | | -// * Значение - Цвет - сам цвета |
5155 | | -Функция СоответствиеВТаблицуЗначений(Знач Соответствие) |
5156 | | - |
5157 | | - Таблица = Новый ТаблицаЗначений; |
5158 | | - Таблица.Колонки.Добавить("Ключ"); |
5159 | | - Таблица.Колонки.Добавить("Значение"); |
5160 | | - Для Каждого Элемент из Соответствие Цикл |
5161 | | - НоваяСтрока = Таблица.Добавить(); |
5162 | | - НоваяСтрока.Ключ = Элемент.Ключ; |
5163 | | - НоваяСтрока.Значение = Элемент.Значение; |
5164 | | - КонецЦикла; |
| 5157 | +// Число - Контрольная сумма строки (два байта). |
| 5158 | +Функция КонтрольнаяСумма(Знач Строка) |
5165 | 5159 |
|
5166 | | - Таблица.Сортировать("Ключ"); |
| 5160 | + Сумма1 = 0; |
| 5161 | + Сумма2 = 0; |
| 5162 | + Для Индекс = 1 По СтрДлина(Строка) Цикл |
| 5163 | + Сумма1 = (Сумма1 + КодСимвола(Строка, Индекс)) % 255; |
| 5164 | + Сумма2 = (Сумма2 + Сумма1) % 255; |
| 5165 | + КонецЦикла; |
5167 | 5166 |
|
5168 | | - Возврат Таблица; |
| 5167 | + Возврат ПобитовоеИли(ПобитовыйСдвигВлево(Сумма2, 8), Сумма1); |
5169 | 5168 |
|
5170 | 5169 | КонецФункции |
5171 | 5170 |
|
|
0 commit comments