Parses MRZ date. @param range the range containing the date, in the YYMMDD format. The range must be 6 characters long. @return parsed date @throws IllegalArgumentException if the range is not 6 characters long.
(MrzRange range)
| 174 | * @throws IllegalArgumentException if the range is not 6 characters long. |
| 175 | */ |
| 176 | public MrzDate parseDate(MrzRange range) { |
| 177 | if (range.length() != 6) { |
| 178 | throw new IllegalArgumentException("Parameter range: invalid value " + range + ": must be 6 characters long"); |
| 179 | } |
| 180 | MrzRange r = null; |
| 181 | try { |
| 182 | r = new MrzRange(range.column, range.column + 2, range.row); |
| 183 | final int year = Integer.parseInt(rawValue(r)); |
| 184 | if (year < 0 || year > 99) { |
| 185 | throw new MrzParseException("Failed to parse MRZ date: invalid year value " + year + ": must be 0..99", mrz, r, format); |
| 186 | } |
| 187 | r = new MrzRange(range.column + 2, range.column + 4, range.row); |
| 188 | final int month = Integer.parseInt(rawValue(r)); |
| 189 | if (month < 1 || month > 12) { |
| 190 | throw new MrzParseException("Failed to parse MRZ date: invalid month value " + month + ": must be 1..12", mrz, r, format); |
| 191 | } |
| 192 | r = new MrzRange(range.column + 4, range.column + 6, range.row); |
| 193 | final int day = Integer.parseInt(rawValue(r)); |
| 194 | if (day < 1 || day > 31) { |
| 195 | throw new MrzParseException("Failed to parse MRZ date: invalid day value " + day + ": must be 1..31", mrz, r, format); |
| 196 | } |
| 197 | return new MrzDate(year, month, day); |
| 198 | } catch (NumberFormatException ex) { |
| 199 | throw new MrzParseException("Failed to parse MRZ date " + rawValue(range) + ": " + ex, mrz, r, format); |
| 200 | } |
| 201 | } |
| 202 | |
| 203 | /** |
| 204 | * Parses the "sex" value from given column/row. |