#!/usr/bin/python
# -*-: encoding: utf-8 -*-
"""
Дали е валиде матичен број.
http://en.wikipedia.org/wiki/JMBG
"""

import sys
import re
import datetime

try:
    matichen = sys.argv[1] 
except IndexError:
    matichen = '0101000450002' 

matichen_re = re.compile(r"^(?P<day>\d{2})(?P<month>\d{2})(?P<year>\d{3})(?P<region>4[1-9])(?P<order>\d{3})(?P<checksum>\d{1})$")

match = re.match(matichen_re,matichen)

if not match:
    raise Exception("Неправилен формат на матичниот.")

day,month,year,region,order,checksum = match.groups()

if year.startswith('0'):
    year = '2' + year
else:
    year = '1' + year

try:
    validdate=datetime.date(int(year),int(month),int(day))
except ValueError:
    raise Exception("Неправилен формат на матичниот (датумот е сјебан)")

checksum=matichen[-1]

z = [int(x) for x in matichen]

m = 11 - ( (7*(z[0]+z[6]) + 6*(z[1]+z[7]) + 5*(z[2]+z[8]) + 4*(z[3]+z[9]) + 3*(z[4] + z[10]) + 2*(z[5] + z[11]) ) % 11) 


if m<=9:
    new_checksum = m
elif m==11:
    new_checksum = 0
elif m==10: 
    raise Exception("Невалиден формат на матичниот.")

if new_checksum==int(checksum):
    print "Точен е матичниот %s" % matichen
else:
    print "Не е точен. %s" % matichen
    
