Почему бы не просто '[0-9]{12}($|[0-9]{2}$)'
?
>>> regex = re.compile('[0-9]{12}($|[0-9]{2}$)')
>>> for i in range(11, 15):
... print(f'Match for string of length {i}: {re.match(regex, "0" * i) is not None}')
...
Match for string of length 11: False
Match for string of length 12: True
Match for string of length 13: False
Match for string of length 14: True
Если вы хотите сопоставить 14-значные числа, которые не заканчиваются концом строки, вам необходимо заменить токен '$'
чем-тоостальное, например '?'
.