1dec.h(3) Library Functions Manual dec.h(3)
2
3
4
6 dec.h - Десятичные строки
7
8
10 #include 'bee2/defs.h'
11
12
13 Функции
14 bool_t decIsValid (const char *dec)
15 Корректная десятичная строка?
16 size_t decCLZ (const char *dec)
17 Число старших нулевых цифр
18 void decFromU32 (char *dec, size_t count, register u32 num)
19 Загрузка из числа u32.
20 u32 decToU32 (const char *dec)
21 Преобразование в число u32.
22 char decLuhnCalc (const char *dec)
23 Вычисление контрольной цифры Луна
24 bool_t decLuhnVerify (const char *dec)
25 Проверка контрольной цифры Луна
26 char decDammCalc (const char *dec)
27 Вычисление контрольной цифры Дамма
28 bool_t decDammVerify (const char *dec)
29 Проверка контрольной цифры Дамма
30
32 Реализовано управление десятичными строками -- словами в алфавите
33 {'0',..,'9'}, которые представляют числа и буферы памяти.
34
35 Первый символ (цифра) является старшим, т.е. используется порядок big-
36 endian. Порядок можно изменить с помощью функции strRev().
37
38 Реализованы алгоритмы Луна (1954) и Дамма (2004) расчета контрольных
39 цифр десятичной строки. Алгоритм Луна стандартизирован в ISO/IEC 7812.
40
41 Характеристики алгоритма Луна
42 (https://en.wikipedia.org/wiki/Luhn_algorithm):
43
44 • обнаруживает одиночные ошибки в цифрах;
45
46 • обнаруживает все одиночные перстановки соседних цифр, кроме 09 <->
47 90;
48
49 • обнаруживает все одиночные ошибки в повторных цифрах, кроме 22 <->
50 55, 33 <-> 66 и 44 <-> 77.
51
52 Алгоритма Дамма (https://en.wikipedia.org/wiki/Damm_algorithm)
53 обнаруживает все одиночные ошибки и перестановки.
54
55 Длина строки, контрольная цифра которой проверяется, на 1 больше длины
56 строки, контрольная цифра которой вычисляется. Считается, что
57 контрольная цифра проверяемой строки добавлена справа. Именно так
58 добавляется контрольная цифра Луна к номеру кредитной карты (как
59 правило, 15-значному) и к номеру IMEI (как правило, 14-значному).
60
61 Предусловие
62 Во все функции кроме decIsValid() передаются корректные десятичные
63 строки и буферы памяти.
64
66 size_t decCLZ (const char * dec)
67 Определяется длина серии из нулевых старших цифр в строке dec.
68
69 Возвращает
70 Длина серии.
71
72 Прим.
73 CLZ == Count of Leading Zeros
74
75 Регулярность
76 Функция нерегулярна.
77
78 Аргументы
79 dec десятичная строка
80
81 char decDammCalc (const char * dec)
82 С помошью алгоритма Дамма определяется контрольная цифра десятичной
83 строки dec.
84
85 Возвращает
86 Контрольная цифра.
87
88 Аргументы
89 dec десятичная строка
90
91 bool_t decDammVerify (const char * dec)
92 С помошью алгоритма Дамма проверяется контрольная цифра, записанная в
93 конце десятичной строки dec.
94
95 Возвращает
96 Признак успеха.
97
98 Аргументы
99 dec десятичная строка
100
101 void decFromU32 (char * dec, size_t count, register u32 num)
102 Младшие count десятичных цифр числа num преобразуются в десятичную
103 строку [count + 1]dec.
104
105 Аргументы
106 dec десятичная строка
107 count число цифр
108 num число
109
110 bool_t decIsValid (const char * dec)
111 Проверяется корректность десятичной строки dec. Строка считается
112 корректной, если она состоит из символов алфавита {'0',...,'9'}.
113
114 Возвращает
115 Признак корректности.
116
117 Регулярность
118 Функция нерегулярна.
119
120 Аргументы
121 dec десятичная строка
122
123 char decLuhnCalc (const char * dec)
124 С помошью алгоритма Луна определяется контрольная цифра десятичной
125 строки dec.
126
127 Возвращает
128 Контрольная цифра.
129
130 Аргументы
131 dec десятичная строка
132
133 bool_t decLuhnVerify (const char * dec)
134 С помошью алгоритма Луна проверяется контрольная цифра, записанная в
135 конце десятичной строки dec.
136
137 Возвращает
138 Признак успеха.
139
140 Аргументы
141 dec десятичная строка
142
143 u32 decToU32 (const char * dec)
144 Десятичная строка dec преобразуется в число u32.
145
146 Возвращает
147 Искомое число \mod 2^32.
148
149 Предупреждения
150 Возможно переполнение. Проверка отсутствия переполнения:
151 strLen(dec) - decCLZ() < 10 || strLen(dec) - decCLZ() == 10 &&
152 strCmp(dec + decCLZ(), '4294967295') <= 0.
153
154 Аргументы
155 dec десятичная строка
156
158 Автоматически создано Doxygen для Библиотека Bee2 из исходного текста.
159
160
161
162Библиотека Bee2 Ср 19 Июл 2023 00:00:00 dec.h(3)