Used to ensure that an AI component conforms to the YYMMDD or YYMM00 formats.
62{
63
64
65#define YY ( (data[0] - '0') * 10 + (data[1] - '0') )
66
67
68 size_t len, pos;
69 char yyyymmdd[9] = {0};
71
72 assert(data);
73
74 len = strlen(data);
75
76
77
78
79
80 if (len != 6)
83 0,
84 len
85 );
86
87
88
89
90
91 if ((pos = strspn(data, "0123456789")) != len)
94 pos,
95 1
96 );
97
98 memcpy(yyyymmdd + 2, data, 6);
99
100
101
102
103
105 yyyymmdd[0] = '1'; yyyymmdd[1] = '9';
107 yyyymmdd[0] = '2'; yyyymmdd[1] = '0';
108 } else {
109 yyyymmdd[0] = '2'; yyyymmdd[1] = '1';
110 }
111
113
117
119 assert(!err_pos || !err_len || ret ==
GS1_LINTER_OK || (*err_pos + *err_len <= len + 2));
120
123 ret,
124 *err_pos - 2,
125 *err_len
126 );
127
129
130}
#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_SYNTAX_DICTIONARY_API gs1_lint_err_t gs1_lint_yyyymmd0(const char *data, size_t *err_pos, size_t *err_len)
Definition lint_yyyymmd0.c:55
gs1_lint_err_t
Linter return codes other than GS1_LINTER_OK indicate an error condition.
Definition gs1syntaxdictionary.h:76
@ GS1_LINTER_ILLEGAL_DAY
The date contains an illegal day of the month.
Definition gs1syntaxdictionary.h:114
@ GS1_LINTER_DATE_TOO_LONG
The date is too long for YYMMDD format.
Definition gs1syntaxdictionary.h:106
@ GS1_LINTER_ILLEGAL_MONTH
The date contains an illegal month of the year.
Definition gs1syntaxdictionary.h:113
@ GS1_LINTER_DATE_TOO_SHORT
The date is too short for YYMMDD format.
Definition gs1syntaxdictionary.h:105
@ GS1_LINTER_OK
No issues were detected by the linter.
Definition gs1syntaxdictionary.h:77
@ GS1_LINTER_NON_DIGIT_CHARACTER
A non-digit character was found where a digit is expected.
Definition gs1syntaxdictionary.h:78
#define CURRENT_YEAR
20YY: For converting YY to 19YY, 20YY, 21YY, etc. for leap year validation
Definition lint_yymmd0.c:38