No, it is encoded the right way!
The format of the second row is:
| Positions | Length | Chars | Meaning |
|---|---|---|---|
| 1–6 | 6 | num | Date of birth (YYMMDD) |
| 7 | 1 | num | Check digit over digits 1–6 |
| 8 | 1 | alpha+< | Sex (M, F or < for male, female or unspecified) |
| 9-14 | 6 | num | Expiration date of document (YYMMDD) |
| 15 | 1 | num | Check digit over digits 9–14 |
| 16–18 | 3 | alpha+< | Nationality |
| 19–29 | 11 | alpha+num+< | Optional1 |
| 30 | 1 | num | Check digit over digits 6–30 (upper line), 1–7, 9–15, 19–29 (middle line) |
The nationality length is 3, but since Germany only needs D the other two slots are filled up with <

So D<< is correct!
Yes my expiration for APRC is set to 991231 → 2099.12.31 the latest date possible for the encoding standard.
Fun fact: it also could be 1999.12.31
Well in 70 years they have to come up with something new!
The year 2100 bug is coming! ![]()