Advertisement
Guest User

cmiN

a guest
Apr 13th, 2009
1,208
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 11.96 KB | None | 0 0
  1. #! /usr/bin/env python
  2. # 12.04.2009 <-> 13.04.2009 | cmiN
  3. # non-standard modules = ( Pmw  )
  4.  
  5.  
  6. from Tkinter import *
  7. import tkFont, tkMessageBox, Pmw, time, random
  8.  
  9.  
  10. def main():
  11.     global info, now
  12.     now=(long(time.time()) / 300) * 300
  13.     info="""
  14. Cnp-Gen este un soft ce genereaza cnp-uri pe baza urmatoarelor cunostinte:
  15.  
  16. SAALLZZJJNNNC - unde fiecare dintre litere reprezinta o cifra:
  17.  
  18.  S = sex + secol ( Persoanelor de sex masculin le sunt atribuite numerele
  19.                       impare iar persoanelor de sex feminin numerele pare. )
  20.  AA  = anul
  21.  LL  = luna
  22.  ZZ  = ziua
  23.  JJ  = codul judetului
  24.  NNN = este un numar din intervalul 001 - 999
  25.  C   = cifra de control ( Fiecare cifra din CNP este inmultita cu cifra
  26.                           de pe aceeasi pozitie din numarul 279146358279;
  27.                           rezultatele sunt insumate, iar rezultatul final
  28.                           este impartit cu rest la 11. Daca restul este 10,
  29.                           atunci cifra de control este 1, altfel cifra de
  30.                           control este egala cu restul.)
  31.  
  32.  
  33.                             by cmiN
  34.                                          
  35. Idee luata dupa scriptul in php de pe http://rstcenter.com/ <tromfil>
  36. """
  37.     county_list()
  38.     frames()
  39.     widgets()
  40.     end()
  41.  
  42.  
  43. def frames():
  44.     global root, font
  45.     root=Tk()
  46.     font=tkFont.Font(family="Comic Sans MS", size=10, weight="bold")
  47.     frame=Frame(root)
  48.     frame.option_add("*font", font)
  49.     menu=Menu(root)
  50.     filemenu=Menu(menu)
  51.     helpmenu=Menu(menu)
  52.     menu.add_cascade(label="File", menu=filemenu)
  53.     menu.add_cascade(label="Help", menu=helpmenu)
  54.     filemenu.add_separator()
  55.     filemenu.add_command(label="Exit", command=bye)
  56.     helpmenu.add_command(label="About", command=info_msgbox)
  57.     root.config(menu=menu)
  58.  
  59.  
  60. def widgets():
  61.     global date, statement, sex, county, cnp_entry, generate_list, validate_list
  62.  
  63.     date=Pmw.Counter(labelpos="w", label_text="Data nasterii: ",
  64.                      entryfield_value=time.strftime("%d/%m/%Y", time.localtime(now)),
  65.                      entryfield_validate={"validator": "date", "format": "dmy",},
  66.                      datatype={"counter": "date", "format": "dmy", "yyyy": 1}
  67.                      )
  68.  
  69.     statement=Pmw.RadioSelect(labelpos="w", label_text="Stare: ", command=statement_callback,
  70.                               frame_borderwidth=2, frame_relief="ridge"
  71.                               )
  72.    
  73.     sex=Pmw.RadioSelect(labelpos="w", label_text="Sex: ", command=sex_callback,
  74.                               frame_borderwidth=2, frame_relief="ridge"
  75.                               )
  76.    
  77.     for text in ("Roman", "Strain rezident in Romania", "Strain"):
  78.         statement.add(text)
  79.     for text in ("Masculin", "Feminin"):
  80.         sex.add(text)
  81.        
  82.     county=Pmw.ComboBoxDialog(title="Judet", buttons=("OK", "Cancel"),
  83.                               defaultbutton="OK", combobox_labelpos="n",
  84.                               label_text="Alege un judet...",
  85.                               scrolledlist_items=(judete_keys)
  86.                               )
  87.     county.withdraw()
  88.     county_button=Button(text="Judet...", command=county_click)
  89.  
  90.     generate=Button(text="Genereaza!", command=generator, fg="red")
  91.  
  92.     generate_list=Pmw.TextDialog(scrolledtext_labelpos="n", title="Lista",
  93.                                  defaultbutton=0,
  94.                                  label_text="Lista cu toate CNP-urile"
  95.                                  )
  96.  
  97.     validate_list=Pmw.TextDialog(scrolledtext_labelpos="n", title="Date",
  98.                                  defaultbutton=0,
  99.                                  label_text="Date despre CNP"
  100.                                  )
  101.    
  102.     generate_list.withdraw()
  103.     validate_list.withdraw()
  104.     generate_button=Button(text="Genereaza lista!", command=list_generator, fg="blue")
  105.  
  106.     cnp_entry=Pmw.EntryField(labelpos="w", label_text="CNP: ", value=1930426394424,
  107.                              validate = {'validator': 'numeric', "max": 9999999999999}
  108.                             )
  109.  
  110.     validate=Button(text="Valideaza!", command=validator, fg="green")
  111.  
  112.     for widget in (date, statement, sex):
  113.         widget.pack(padx=8, pady=8, anchor="w")
  114.  
  115.     county_button.pack(padx=20, pady=20, anchor="c")
  116.     cnp_entry.pack(padx=20, pady=20, anchor="c")
  117.     generate.pack(anchor="w")
  118.     generate_button.pack(anchor="w")
  119.     validate.pack(anchor="w")
  120.  
  121.  
  122. def county_click():
  123.     global result, _choice
  124.     result=county.activate()
  125.     choice=county.get()
  126.     if result=="OK":
  127.         _choice=choice
  128.  
  129.  
  130. def generator():
  131.     try:
  132.         global ZZ, LL, AA, S, JJ
  133.         _date=date.get()
  134.         _date=_date.split("/")
  135.         ZZ=_date[0]
  136.         LL=_date[1]
  137.         AA=_date[2][2:]
  138.         if _statement=="Roman":
  139.             if int(_date[2]) in range(1800, 1900):
  140.                 if _sex=="Masculin":
  141.                     S="3"
  142.                 elif _sex=="Feminin":
  143.                     S="4"
  144.             if int(_date[2]) in range(1900, 1999):
  145.                 if _sex=="Masculin":
  146.                     S="1"
  147.                 elif _sex=="Feminin":
  148.                     S="2"
  149.             if int(_date[2]) in range(2000, 2099):
  150.                 if _sex=="Masculin":
  151.                     S="5"
  152.                 elif _sex=="Feminin":
  153.                     S="6"
  154.         if _statement=="Strain rezident in Romania":
  155.             if _sex=="Masculin":
  156.                 S="7"
  157.             elif _sex=="Feminin":
  158.                 S="8"
  159.         if _statement=="Strain":
  160.             S="9"
  161.         JJ=judete[_choice]
  162.         NNN=str(random.randint(001, 999))
  163.         if len(NNN)==1:
  164.             NNN="00"+NNN
  165.         elif len(NNN)==2:
  166.             NNN="0"+NNN
  167.         cn=S+AA+LL+ZZ+JJ+NNN
  168.         suma=0
  169.         z=0
  170.         for x in "279146358279":
  171.             suma=suma+int(x)*int(cn[z])
  172.             z=z+1
  173.         rest=suma%11
  174.         if rest==10:
  175.             C="1"
  176.         else:
  177.             C=str(rest)
  178.         cnp=S+AA+LL+ZZ+JJ+NNN+C
  179.         cnp_entry.setentry(int(cnp))
  180.         return True
  181.     except:
  182.         error_msgbox()
  183.         return False
  184.  
  185.  
  186. def list_generator():
  187.     global cnp_list
  188.     if generator()==True:
  189.         cnp_list=[]
  190.         for NNN in range(001, 1000):
  191.             NNN=str(NNN)
  192.             if len(NNN)==1:
  193.                 NNN="00"+NNN
  194.             elif len(NNN)==2:
  195.                 NNN="0"+NNN
  196.             cn=S+AA+LL+ZZ+JJ+NNN
  197.             suma=0
  198.             z=0
  199.             for x in "279146358279":
  200.                 suma=suma+int(x)*int(cn[z])
  201.                 z=z+1
  202.             rest=suma%11
  203.             if rest==10:
  204.                 C="1"
  205.             else:
  206.                 C=str(rest)
  207.             cnp=S+AA+LL+ZZ+JJ+NNN+C
  208.             cnp_list.append(cnp)
  209.         generate_list.configure(text_state="normal")
  210.         generate_list.clear()
  211.         for x in cnp_list:
  212.             generate_list.insert("end", x+"\n")
  213.         generate_list.configure(text_state="disabled")
  214.         generate_list.activate()
  215.  
  216.  
  217. def validator():
  218.     state=True
  219.     try:
  220.         cnp=cnp_entry.get()
  221.         if len(cnp)!=13:
  222.             raise Exception, "Lungime nevalida."
  223.         S, AA, LL, ZZ, JJ, NNN, C=(int(cnp[0:1]), int(cnp[1:3]), int(cnp[3:5]), int(cnp[5:7]),
  224.                                    int(cnp[7:9]), int(cnp[9:12]), cnp[12:13]
  225.                                    )
  226.         cn=cnp_entry.get()[:-1]
  227.         if not S in range(1, 10):
  228.             raise Exception, "Campul pentru sex nevalid."
  229.         if not LL in range(1, 13):
  230.             raise Exception, "Campul pentru luna nevalid."
  231.         if not ZZ in range(1, 32):
  232.             raise Exception, "Campul pentru ziua nevalid."
  233.         if not JJ in range(1, 53):
  234.             raise Exception, "Campul pentru judet nevalid."
  235.         suma=0
  236.         z=0
  237.         for x in "279146358279":
  238.             suma=suma+int(x)*int(cn[z])
  239.             z=z+1
  240.         rest=suma%11
  241.         if rest==10:
  242.             c="1"
  243.         else:
  244.             c=str(rest)
  245.         if not C==c:
  246.             raise Exception, "Cifra de control nevalida,"
  247.     except:
  248.         state=False
  249.     if state==True:
  250.         info_valid_msgbox()
  251.         AA, LL, ZZ, JJ, NNN, C=(cnp[1:3], cnp[3:5], cnp[5:7],
  252.                                 cnp[7:9], cnp[9:12], cnp[12:13]
  253.                                 )
  254.         if S==1:
  255.             AA="19"+AA
  256.             text1="Persoana rezidenta in Romania de sex masculin nascuta in ziua: "+ZZ+" luna: "+LL+" anul: "+AA
  257.         if S==2:
  258.             AA="19"+AA
  259.             text1="Persoana rezidenta in Romania de sex feminin nascuta in ziua: "+ZZ+" luna: "+LL+" anul: "+AA
  260.         if S==3:
  261.             AA="18"+AA
  262.             text1="Persoana rezidenta in Romania de sex masculin nascuta in ziua: "+ZZ+" luna: "+LL+" anul: "+AA
  263.         if S==4:
  264.             AA="18"+AA
  265.             text1="Persoana rezidenta in Romania de sex feminin nascuta in ziua: "+ZZ+" luna: "+LL+" anul: "+AA
  266.         if S==5:
  267.             AA="20"+AA
  268.             text1="Persoana rezidenta in Romania de sex masculin nascuta in ziua: "+ZZ+" luna: "+LL+" anul: "+AA
  269.         if S==6:
  270.             AA="20"+AA
  271.             text1="Persoana rezidenta in Romania de sex feminin nascuta in ziua: "+ZZ+" luna: "+LL+" anul: "+AA
  272.         if S==7:
  273.             AA="xx"+AA
  274.             text1="Persoana straina rezidenta in Romania de sex masculin nascuta in ziua: "+ZZ+" luna: "+LL+" anul: "+AA
  275.         if S==8:
  276.             AA="xx"+AA
  277.             text1="Persoana straina rezidenta in Romania de sex feminin nascuta in ziua: "+ZZ+" luna: "+LL+" anul: "+AA
  278.         if S==9:
  279.             AA="xx"+AA
  280.             text1="Persoana straina de sex masculin/feminin nascuta in ziua: "+ZZ+" luna: "+LL+" anul: "+AA
  281.         for text2 in judete.keys():
  282.             if JJ==judete[text2]:
  283.                 break
  284.         text=text1+" in judetul: "+text2+" cu numarul de evidenta: "+NNN+" si cifra de control: "+C+"."
  285.         validate_list.configure(text_state="normal")
  286.         validate_list.clear()
  287.         validate_list.insert("end", text)
  288.         validate_list.configure(text_state="disabled")
  289.         validate_list.activate()
  290.     else:
  291.         warning_invalid_msgbox()
  292.        
  293.  
  294. def bye():
  295.     root.destroy()
  296.  
  297.  
  298. def statement_callback(tag):
  299.     global _statement
  300.     _statement=tag
  301.  
  302.  
  303. def sex_callback(tag):
  304.     global _sex
  305.     _sex=tag
  306.  
  307.  
  308. def info_msgbox():
  309.     tkMessageBox.showinfo("About", info)
  310.  
  311. def error_msgbox():
  312.     tkMessageBox.showerror("Error", "Setari nevalide!")
  313.  
  314. def info_valid_msgbox():
  315.     tkMessageBox.showinfo("Valid", "Felicitari, CNP-ul introdus/generat este valid!")
  316.  
  317. def warning_invalid_msgbox():
  318.     tkMessageBox.showwarning("Warning", "CNP-ul introdus/generat NU este valid.")
  319.  
  320.  
  321. def county_list():
  322.     global judete, judete_keys
  323.     judete={"Alba": "01", "Arad": "02", "Arges": "03", "Bacau": "04", "Bihor": "05",
  324.             "Bistrita-Nasaud": "06", "Botosani": "07", "Brasov": "08", "Braila": "09", "Buzau": "10",
  325.             "Caras-Severin": "11", "Cluj": "12", "Constanta": "13", "Covasna": "14", "Dambovita": "15",
  326.             "Dolj": "16", "Galati": "17", "Gorj": "18", "Harghita": "19", "Hunedoara": "20",
  327.             "Ialomita": "21", "Iasi": "22", "Ilfov": "23", "Maramures": "24", "Mehedinti": "25",
  328.             "Mures": "26", "Neamt": "27", "Olt": "28", "Prahova": "29", "Satu Mare": "30",
  329.             "Salaj": "31", "Sibiu": "32", "Suceava": "33", "Teleorman": "34", "Timis": "35",
  330.             "Tulcea": "36", "Vaslui": "37", "Valcea": "38", "Vrancea": "39", "Bucuresti": "40",
  331.             "Bucuresti S.1": "41", "Bucuresti S.2": "42", "Bucuresti S.3": "43", "Bucuresti S.4": "44", "Bucuresti S.5": "45",
  332.             "Bucuresti S.6": "46", "Calarasi": "51", "Giurgiu": "52"
  333.             }
  334.     judete_keys=()
  335.     for x in judete.keys():
  336.         judete_keys=judete_keys+(x,)
  337.     judete_keys=sorted(judete_keys)
  338.  
  339.  
  340. def end():
  341.     root.title("Cnp-Gen")
  342.     root.minsize(400, 400)
  343.     root.maxsize(400, 400)
  344.     root.mainloop()
  345.  
  346. main()
  347.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement