|
|
|
Расчет контрольных сумм для ГИС ЖКХ
|
|||
|---|---|---|---|
|
#18+
Добрый день уважаемые пользователи, помогите решить задачу: После генерации строки номера ЕЛС со 2-го по 10-ый символ система рассчитывает контрольную сумму следующим образом: 1. каждый кириллический символ из ЕЛС должен быть приведен к числовому виду, для этого необходимо код символа в кодировке UTF-8 перевести из двоичного представления в десятичное; 2. Каждая цифра из ЕЛС или число, соответствующее кириллическому символу из ЕЛС, умножается на номер своей позиции в номере. ЕЛС, при этом позиции отсчитываются с конца номера - справа налево; 4. полученные произведения суммируются; 5. полученная сумма делится на 10; 6. Остаток от деления является контрольной суммой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2016, 11:22 |
|
||
|
Расчет контрольных сумм для ГИС ЖКХ
|
|||
|---|---|---|---|
|
#18+
Пример номера: 40АА000177 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2016, 11:23 |
|
||
|
Расчет контрольных сумм для ГИС ЖКХ
|
|||
|---|---|---|---|
|
#18+
Модераторы, этому место в форуме "работа"... ТС: изучаем матчасть. Конвертировать в UTF-8 - функция convert для строк и utl_raw.convert для raw/blob Получить конкретный символ из строки: функция substr Получить код символа: функция ascii Умножить число на число: оператор * Сложить: оператор + получить остаток от деления: функция mod Сложность представляет лишь освоение и правильное применение функции convert, поскольку по-хорошему требует осознания довольно объемного Globalization Support Guide. С другой стороны, не так много ораклоидов вообще владеют этой темой на уровне выше "установи NLS_LANG как в БД" - можно заработать полезный скилл. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2016, 12:55 |
|
||
|
Расчет контрольных сумм для ГИС ЖКХ
|
|||
|---|---|---|---|
|
#18+
Нубик-БобикПосле генерации строки номера ЕЛСПервоисточник является ДСП и скрыт от интернетов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2016, 08:11 |
|
||
|
Расчет контрольных сумм для ГИС ЖКХ
|
|||
|---|---|---|---|
|
#18+
andrey_anonymous, что то пошло не так: select ascii(convert('А','UTF8')) a ,ascii(convert('Б','UTF8')) b from dual REUSLT: 208|208 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2016, 09:23 |
|
||
|
Расчет контрольных сумм для ГИС ЖКХ
|
|||
|---|---|---|---|
|
#18+
Нубик-Бобикandrey_anonymous, что то пошло не так: select ascii(convert('А','UTF8')) a ,ascii(convert('Б','UTF8')) b from dual REUSLT: 208|208 конечно, не так (то, что не лезет в один байт ничто длиннее байта ) Код: plsql 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2016, 11:32 |
|
||
|
Расчет контрольных сумм для ГИС ЖКХ
|
|||
|---|---|---|---|
|
#18+
orawish, а как правильно получить эти самые конечные 208145 из Typ=1 Len=2: 208,145 ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2016, 14:02 |
|
||
|
Расчет контрольных сумм для ГИС ЖКХ
|
|||
|---|---|---|---|
|
#18+
Нубик-Бобикorawish, а как правильно получить эти самые конечные 208145 из Typ=1 Len=2: 208,145 ? это приведено для примера. Еслиб Вы посмотрели во что превратились символы прийдя из Вашей 1251 в utf-8 то увидели бы что там появились строки по два символа: Код: plsql 1. 2. 3. другими словами Вам сначала следуем разбить строку на символы, а потом посчитать в коды каждый символ полученной строки. Кроме того, надо иметь ввиду, что в utf-8 длина строки может оказаться больше и выйти за границы диапазона, а значит преобразовывать лучше уже разбив на последовательность символов и потом опять разбив на символы. :) Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Но на самом деле проще написать свою функцию, которая будет на PL/SQL (или встроенной java) пересчитывать код строки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2016, 15:08 |
|
||
|
Расчет контрольных сумм для ГИС ЖКХ
|
|||
|---|---|---|---|
|
#18+
Нубик-Бобикorawish, а как правильно получить эти самые конечные 208145 из Typ=1 Len=2: 208,145 ? формулируйте чётче ваши хотелки (иначе получать ответы будете как/кто ваши вопросы понял ;) Код: plsql 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2016, 15:27 |
|
||
|
Расчет контрольных сумм для ГИС ЖКХ
|
|||
|---|---|---|---|
|
#18+
orawish Код: plsql 1. 2. 3. 4. 5. 6. Дело в том, что ascii ожидает параметр в кодировке БД. Поэтому на БД с characterset AL32UTF8 оно отлично выдает код символа вида "53392". А вот на монобайте - имеем то, что имеем. Моя ошибка. Вот так должно работать независимо от кодировки БД: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2016, 16:07 |
|
||
|
Расчет контрольных сумм для ГИС ЖКХ
|
|||
|---|---|---|---|
|
#18+
...endianness еще бы проверить/учесть :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2016, 16:08 |
|
||
|
Расчет контрольных сумм для ГИС ЖКХ
|
|||
|---|---|---|---|
|
#18+
Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2016, 17:23 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39327683&tid=1887221]: |
0ms |
get settings: |
7ms |
get forum list: |
22ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
196ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
31ms |
get tp. blocked users: |
1ms |
| others: | 250ms |
| total: | 519ms |

| 0 / 0 |
