Used to ensure that an AI component conforms to the modernised North American positive offer file coupon code standard, as carried in AI (8112).
73{
74
75 size_t pos;
76 int vli;
77 const char *p, *q;
78
79 assert(data);
80
81
82
83
84
85
86 if ((pos = strspn(data, "0123456789")) != strlen(data))
89 pos,
90 1
91 );
92
93 p = data;
94 q = data + strlen(data);
95
96
97
98
99
100
101
102
103 if (p == q)
106 0,
107 (size_t)(q - data)
108 );
109
110 if (*p != '0' && *p != '1')
113 (size_t)(p - data),
114 1
115 );
116
117
118
119
120
121
122
123 if (++p == q)
126 0,
127 (size_t)(q - data)
128 );
129 if (*p > '6')
132 (size_t)(p - data),
133 1
134 );
135 vli = *p - '0' + 6;
136
137 if (q - ++p < vli)
140 (p == q) ? 0 : (size_t)(p - data),
141 (p == q) ? (size_t)(q - data) : (size_t)(q - p)
142 );
143
144 p += vli;
145
146
147
148
149
150
151 if (q - p < 6)
154 (p == q) ? 0 : (size_t)(p - data),
155 (p == q) ? (size_t)(q - data) : (size_t)(q - p)
156 );
157
158 p += 6;
159
160
161
162
163
164
165
166 if (p == q)
169 0,
170 (size_t)(q - data)
171 );
172 vli = *p - '0' + 6;
173
174 if (q - ++p < vli)
177 (p == q) ? 0 : (size_t)(p - data),
178 (p == q) ? (size_t)(q - data) : (size_t)(q - p)
179 );
180
181 p += vli;
182
183
184
185
186
187
188 if (p != q)
191 (size_t)(p - data),
192 (size_t)(q - p)
193 );
194
196
197}
#define GS1_LINTER_RETURN_ERROR(error, position, length)
Return from a linter indicating that a problem was detected with the given data.
Definition gs1syntaxdictionary-utils.h:77
#define GS1_LINTER_RETURN_OK
Return from a linter indicating that no problem was detected with the given data.
Definition gs1syntaxdictionary-utils.h:62
@ GS1_LINTER_COUPON_MISSING_FORMAT_CODE
The coupon's Format Code is missing.
Definition gs1syntaxdictionary.h:123
@ GS1_LINTER_COUPON_INVALID_FORMAT_CODE
The coupon's Format Code must be "0" or "1".
Definition gs1syntaxdictionary.h:124
@ GS1_LINTER_COUPON_MISSING_SERIAL_NUMBER_VLI
The coupon's Serial Number VLI is missing.
Definition gs1syntaxdictionary.h:129
@ GS1_LINTER_COUPON_TRUNCATED_SERIAL_NUMBER
The coupon's Serial Number is shorter than what is indicated by its VLI.
Definition gs1syntaxdictionary.h:130
@ GS1_LINTER_COUPON_MISSING_FUNDER_VLI
The coupon's Funder VLI is missing.
Definition gs1syntaxdictionary.h:125
@ GS1_LINTER_COUPON_TRUNCATED_OFFER_CODE
The coupon's Offer Code is shorter than the required six digits.
Definition gs1syntaxdictionary.h:128
@ GS1_LINTER_COUPON_EXCESS_DATA
The coupon contains excess data after the recognised optional fields.
Definition gs1syntaxdictionary.h:178
@ GS1_LINTER_COUPON_INVALID_FUNDER_LENGTH
The coupon's Funder VLI must be "0" to "6".
Definition gs1syntaxdictionary.h:126
@ GS1_LINTER_NON_DIGIT_CHARACTER
A non-digit character was found where a digit is expected.
Definition gs1syntaxdictionary.h:78
@ GS1_LINTER_COUPON_TRUNCATED_FUNDER
The coupon's Funder is shorter than what is indicated by its VLI.
Definition gs1syntaxdictionary.h:127