Verificare, validare si extragere date din CNP

Pascal este un limbaj imperativ, creat inițial pentru a ajuta la predarea noțiunilor de programare structurati studenților. Delphi, urmașul lui Pascal, este un mediu de dezvoltare pentru aplicații Windows. Delphi este primul limbaj de programare (Object Pascal, mai exact) care a îmbinat ușurința în programare a limbajelor de nivel înalt și puterea uneltelor de lucru de nivel scăzut într-un mediu RAD.

Verificare, validare si extragere date din CNP

Postby ori » 10 Jun 2011, 23:22

Salutare.
Incepator in ale programarii (Delphi 7) m-am lovit la serviciu de urmatoarea problema: trebuiesc introduse cateva zeci de mii de pacienti cu date personale ( nume, prenume, ..... CNP, adresa, etc.), inclusiv sexul, data nasterii, locul nasterii, varsta (la data curenta). M-am gandit ca aceste date sa le stochez intr-un tabel dbf (utilizand Delphi 7 cu BDE), sa introduc nume, prenume, adresa, CNP.
Si ca sa nu mai caut prin ditamai dosarul la data nasterii, locul nasterii etc. aceste date sa fie extrase din CNP automat si apoi sa le salvez in tabel.
Asta facand inainte verificare si validarea CNP-ului sa contina 13 cifre si nu litere, si eventual verificarea cifrei de control.
Marturisesc ca am studiat rezultatele Google in special cele publicate de DarkByte (super treaba), dar cum am spus nu ma pricep prea bine mai ales la Free Pascal (cum am vazut pe un alt forum).
Ma puteti ajuta pt. rezolvarea acestei probleme? ^:)^
Multumesc anticipat.
0,0p / 0 votes
User avatar
ori
Bit
 
Joined: 10 Jun 2011
Status: 0

Re: Verificare, validare si extragere date din CNP

Postby DarkByte » 10 Jun 2011, 23:50

Salut, ori, si multumesc.

Nu am inteles exact ce ai nevoie ... am inteles ca vrei sa folosesti o baza de date (I have never worked with databases in Delphi :P) in care sa introduci, direct din parsarea CNP-ului, sexul - data nasterii - locul nasterii. However, daca stii lucra cu baze de date si codul meu de parsare al CNP-urilor spui ca l-ai gasit ... ce anume ai nevoie ? :)

Daca e nevoie si poate usura treaba, pune si cod.

Bafta

P.S. Cand ai timp si chef, prezinta-te ;)
0,0p / 0 votes
User avatar
DarkByte
11011011
 
Joined: 29 Dec 2009
Status: 140

Re: Verificare, validare si extragere date din CNP

Postby ori » 11 Jun 2011, 00:27

Multam de raspuns. Iata ce am reusit sa fac conform instructiunilor tale. Dar nu este complet. Lipseste data nasterii, varsta, locul nasterii, sexul. ~X(

  1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7.   Dialogs, StdCtrls;
  8.  
  9. type
  10.   TForm1 = class(TForm)
  11.     Label1: TLabel;
  12.     Edit1: TEdit;
  13.     Button1: TButton;
  14.     Label2: TLabel;
  15.     ComboBox1: TComboBox;
  16.     Label3: TLabel;
  17.     ComboBox2: TComboBox;
  18.     Label4: TLabel;
  19.     ComboBox3: TComboBox;
  20.     Label5: TLabel;
  21.     ComboBox4: TComboBox;
  22.     Label6: TLabel;
  23.     ComboBox5: TComboBox;
  24.     procedure Button1Click(Sender: TObject);
  25.   private
  26.     { Private declarations }
  27.   public
  28.     { Public declarations }
  29.   end;
  30.  
  31. var
  32.   Form1: TForm1;
  33.  
  34. implementation
  35.  
  36. {$R *.dfm}
  37.  
  38. function OnlyDigits(s:string):boolean;
  39. var i:byte;
  40.     d:boolean;
  41. begin
  42.   d:=true;
  43.   for i:=1 to length(s) do
  44.     if not (s[i] in ['0'..'9']) then d:=false;
  45.   result:=d;
  46. end;
  47.  
  48. function IsMonthOk(s:String):Boolean;
  49. var luna:byte;
  50. begin
  51.   luna := StrToInt (Copy(s, 4, 2));
  52.   IsMonthOk := (luna <= 12) and (luna <> 0);
  53. end;
  54.  
  55. function IsDayOk(s:String):Boolean;
  56. var ziua:byte;
  57. begin
  58.   ziua := StrToInt (Copy(s, 6, 2));
  59.   IsDayOk := (ziua <= 31) and (ziua <> 0);
  60. end;
  61.  
  62. function IsControlDigitOk(s:string):Boolean;
  63. const c : string = '279146358279';
  64. var suma, rest : integer;
  65.     i : byte;
  66. begin
  67.   suma := 0;
  68.   For i:=1 to 12 do suma := suma + StrToInt(s[i])*StrToInt(c[i]);
  69.   rest := suma mod 11;
  70.   if rest = 10 then rest := 1;
  71.   IsControlDigitOk := (IntToStr(rest) = s[13]);
  72. end;
  73.  
  74. procedure TForm1.Button1Click(Sender: TObject);
  75. var
  76.   s1, s2, s3, s4: string;
  77. begin
  78.   ComboBox1.Items.Clear;
  79.   s1:=Edit1.Text;
  80.   if (Length(s1)=13) and OnlyDigits(s1)
  81.     Then Begin
  82.       ComboBox1.Items.Add('CNP Valid');
  83.       Edit1.Color:=clWhite;
  84.          End
  85.     Else Begin
  86.       If not OnlyDigits(s1) then ComboBox1.Items.Add('CNP trebuie sa contina doar cifre');
  87.       if not (Length(s1)=13) then ComboBox1.Items.Add('CNP trebuie sa contina 13 cifre');
  88.       Edit1.Color:=clRed;
  89.          End;
  90.   ComboBox1.ItemIndex:=0;
  91. begin
  92. ComboBox2.Items.Clear;
  93.   s2:=Edit1.Text;
  94.   if IsMonthOK(s2)
  95.     Then Begin
  96.       ComboBox2.Items.Add('Luna este corecta.');
  97.       Edit1.Color:=clWhite;
  98.          End
  99.     Else Begin
  100.       If not IsMonthOK(s2) then ComboBox2.Items.Add('Luna nu este corecta.');
  101.       Edit1.Color:=clRed;
  102.          End;
  103.   ComboBox2.ItemIndex:=0;
  104. begin
  105. ComboBox3.Items.Clear;
  106.   s3:=Edit1.Text;
  107.   if IsDayOK(s3)
  108.     Then Begin
  109.       ComboBox3.Items.Add('Ziua este corecta.');
  110.       Edit1.Color:=clWhite;
  111.          End
  112.     Else Begin
  113.       If not IsDayOK(s3) then ComboBox3.Items.Add('Ziua nu este corecta.');
  114.       Edit1.Color:=clRed;
  115.          End;
  116.   ComboBox3.ItemIndex:=0;
  117. begin
  118. ComboBox4.Items.Clear;
  119.   s4:=Edit1.Text;
  120.   if IsControlDigitOK(s4)
  121.     Then Begin
  122.       ComboBox4.Items.Add('Cifra de control este corecta.');
  123.       Edit1.Color:=clWhite;
  124.          End
  125.     Else Begin
  126.       If not IsControlDigitOK(s4) then ComboBox4.Items.Add('Cifra de control nu este corecta.');
  127.       Edit1.Color:=clRed;
  128.          End;
  129.   ComboBox4.ItemIndex:=0;
  130. end;
  131. end;
  132. end;
  133. end;
  134.  
  135. end.
0,0p / 0 votes
User avatar
ori
Bit
 
Joined: 10 Jun 2011
Status: 0

Re: Verificare, validare si extragere date din CNP

Postby DarkByte » 11 Jun 2011, 00:46

Bun - n-ai prea specificat ce vrei, dar Google mi-a zis ca nu poti compila programul in Delphi 2006 ( :P ) - presupun ca e vorba de programul complet :)

O sa-l rescriu maine in Delphi - complet - si o sa-l postez aici.

Bafta si noapte buna :)
0,0p / 0 votes
User avatar
DarkByte
11011011
 
Joined: 29 Dec 2009
Status: 140

Re: Verificare, validare si extragere date din CNP

Postby ori » 11 Jun 2011, 11:23

Da deci in formul meu vreau sa intoduc cnp intr-un TEdit.
apoi daca se apasa tasta Enter (pt. a merge la urmatorul control), la acest eveniment sa se faca verificarea:
- daca este format din 13 cifre (ca in codul de mai sus), daca nu sa se atentioneze asupra acestui lucru corectandu-se eroarea;
- sa afisez intr-un Label sexul (de exemplu M sau F) valoare care sa o salvez in tabel;
- in alt Label sa afisez data nasterii ( de forma zz.ll.aaaa) calculand apoi varsta in ani raportat la data curenta, data nasterii fiind si ea salvata in tabel;
- locul nasterii afisat intr-un alt label, conform codului de judet (exemplu 36 = Tulcea) care iarasi il salvez in tabel.
Bineinteles ca label-urile pot fi inlocuite de ComboBox sau TEdit etc.

Exemplu:
2750815360023 (fictiv)
Sexul = F
Data nasterii= 15.08.1975
Locul nasterii= Tulcea

CNP-ul fiind fictiv, cifra de control este la intamplare.

In felul asta este mai greu de gresit CNP-ul, adica sa nu introduc mai mult de 13 cifre sau vreo litera, sexul sa fie conform standardizarii, luna nu mai mare de 12, ziua nu mai mare de 31, anul in conformitate cu sexul (acestea 3 formand data nasterii), iar codul de judet conform codificarii standard.
Daca erau 100 - 200 de pacienti de inregistrat era ok dar sunt zeci de mii, iar chestia asta ar cam scurta timpul de lucru la jumatate. ~X(

La Delphi 2006 eroarea este pe readkey, clrscr. Oricum ma depaseste. :((
0,0p / 0 votes
User avatar
ori
Bit
 
Joined: 10 Jun 2011
Status: 0

Re: Verificare, validare si extragere date din CNP

Postby DarkByte » 11 Jun 2011, 19:43

ReadKey si ClrScr nu au niciun folos intr-o aplicatie Windows :)

M-am apucat de program, o sa-l postez curand.

Bafta !

L.E. Am rescris tot codul de validare a CNP-urilor si l-am transformat intr-o clasa pentru a usura validarile de CNP in Delphi :)
0,0p / 0 votes
User avatar
DarkByte
11011011
 
Joined: 29 Dec 2009
Status: 140

Re: Verificare, validare si extragere date din CNP

Postby sharky92 » 11 Jun 2011, 20:12

Vin si eu cu un mic ajutor, pe langa cel adus de DarkByte. Programul este facut in Free Pascal, verifica CNP si ne da cateva date despre persoana respectiva. Sper sa iti fie de folos. (va rog sa treceti cu vederea stilul babesc in care este scris :D , e un pic mai vechi, l-am facut anul trecut)

  1.  
  2. {Made by Sharky92}
  3.  
  4. Program interactiv;
  5. uses crt;
  6. Type CN=record
  7.      ziua:string;
  8.      luna:string;
  9.      an:string;
  10.      Judet:string;
  11.      nrord:integer;
  12.      sex:byte;
  13.          end;
  14.  
  15. var CNP:String;
  16.     poz:byte;
  17.     C:char;
  18.     i:integer;
  19.     info:CN;
  20.     A:array[1..60] of string;
  21.  
  22.  
  23.        Procedure Desen;
  24.  
  25.         begin
  26.         for i:=25 to 55 do begin
  27.         gotoxy(i,2);
  28.         write(char(205));
  29.         end;
  30.  
  31.         gotoxy(24,2);
  32.         write(char(201));
  33.         gotoxy(56,2);
  34.         write(char(187));
  35.  
  36.         for i:=3 to 4 do begin
  37.         gotoxy(24,i);
  38.         write(char(186));
  39.         end;
  40.  
  41.         gotoxy(24,5);
  42.         write(char(200));
  43.  
  44.         for i:=25 to 55 do begin
  45.         gotoxy(i,5);
  46.         write(char(205));
  47.         end;
  48.  
  49.         gotoxy(56,5);
  50.         write(char(188));
  51.  
  52.         for i:=4 downto 3 do  begin
  53.         gotoxy(56,i);
  54.         write(char(186));
  55.         end;
  56.  
  57.         gotoxy(30,4);
  58.         write('C N P : ');
  59.         read(CNP);
  60.  
  61.                 Gotoxy(24,20);
  62.                 for i:=24 to 56 do begin
  63.                 gotoxy(i,20);
  64.                 write(char(196))
  65.                 end;
  66.                 for i:=24 to 56 do begin
  67.                 gotoxy(i,24);
  68.                 write(char(196));
  69.                 end;
  70.                 gotoxy(24,19);
  71.                 write('MESAJE:');
  72.                 Gotoxy(19,1);
  73.                 write('***Pentru a iesi din program ');
  74.  
  75.                 write('apasati ESC***');
  76.  
  77.  
  78.     end;
  79.  
  80.         Procedure verificare(CNP:string);
  81.         var v:boolean;
  82.                     eroare,Zv,Lv:byte;
  83.                     i,aux,Jv:byte;
  84.                     n3,n4:longint;
  85.                     nrv:integer;
  86.                     nrs,n1,n2,Zs,Ls,Js:String;
  87.  
  88.         begin
  89.         v:=true;
  90.         if length(CNP)<>13 then
  91.             begin
  92.             v:=false;
  93.             Gotoxy(28,22);
  94.             write('Ati introdus un CNP gresit'); Delay(4000); Halt;
  95.             end;
  96.  
  97.                 n1:=Copy(CNP,1,7);
  98.                 n2:=Copy(CNP,8,6);
  99.                 Val(n1,n3,eroare);
  100.                 if eroare<>0 then begin gotoxy(28,22); write('Ati introdus un CNP gresit'); Delay(4000); Halt;end;
  101.                 val(n2,n4,eroare);
  102.                 if eroare<>0 then v:=false;
  103.  
  104.  
  105.  
  106.                 if V=false then begin gotoxy(28,22); write('Ati introdus un CNP gresit'); Delay(4000); Halt; end;
  107.                 if V=true then
  108.                 Case poz of
  109.  
  110.                       2:
  111.                       Begin
  112.                       Val(CNP[1],aux,eroare);
  113.                       if aux=1 then
  114.                                 Begin
  115.                                 gotoxy(28,22);
  116.                                 write('Sex : MASCULIN                ');
  117.                                 end;
  118.                       if aux=2 then
  119.                                 Begin
  120.                                 gotoxy(28,22);
  121.                                 write('Sex : FEMININ                 ');
  122.                                 end;
  123.                       if (aux<>1) and (aux<>2) then
  124.                                 begin
  125.                                 gotoxy(28,22);
  126.                                 write('Ati introdus un CNP gresit'); Delay(4000); Halt;
  127.                                 end;
  128.  
  129.                       end;
  130.  
  131.  
  132.                       1:
  133.                       begin
  134.                       Zs:=CNP[6]+CNP[7];
  135.                       Ls:=CNP[4]+CNP[5];
  136.                       Val(Zs,Zv,eroare);
  137.                       Val(Ls,Lv,eroare);
  138.                       if (Zv>32) or (Lv>12) or(v=false) then begin gotoxy(28,22); write('Ati introdus un CNP gresi'); Delay(4000); Halt; end;
  139.                       Gotoxy(28,22);
  140.                       Write('Data nasterii : ',Zv,'.',Lv,'.','19',CNP[2]+CNP[3]);
  141.                       end;
  142.  
  143.                       3:
  144.                       begin
  145.                       Js:=CNP[8]+CNP[9];
  146.                       Val(Js,Jv,eroare);
  147.                       if Jv>52 then begin gotoxy(28,22); write('Ati introdus un CNP gresit'); Delay(4000); Halt; End;
  148.                       Gotoxy(28,22);
  149.                       write('Judetul :',A[Jv],'          ');
  150.                       end;
  151.  
  152.                       4:
  153.                       Begin
  154.                       nrs:=CNP[10]+CNP[11]+CNP[12] ;
  155.                       Val(nrs,nrv,eroare);
  156.                       Gotoxy(28,22);
  157.                       write('Numarul de ordine :',nrv,'       ');
  158.                       end;
  159.                       end;
  160.  
  161.  
  162.  
  163.  
  164.         end;
  165.  
  166.     BEGIN {De aici incepe corpul programului}
  167.  
  168.     A[1]:='Alba Iulia';
  169.     A[2]:='Arad';
  170.     A[3]:='Arges';
  171.     A[4]:='Bacau';
  172.     A[5]:='Bihor';
  173.     A[6]:='Bistrita';
  174.     A[7]:='Botosani';
  175.     A[8]:='Brasov';
  176.     A[9]:='Braila';
  177.     A[10]:='Buzau';
  178.     A[11]:='Caras-Severin';
  179.     A[12]:='Cluj';
  180.     A[13]:='Constanta';
  181.     A[14]:='Casanova';
  182.     A[15]:='Dambovita';
  183.     A[16]:='Dolj';
  184.     A[17]:='Galati';
  185.     A[18]:='Gorj';
  186.     A[19]:='Harghita';
  187.     A[20]:='Hunedoara';
  188.     A[21]:='Ialmonita';
  189.     A[22]:='Iasi';
  190.     A[23]:='Ilfov';
  191.     A[24]:='Maramures';
  192.     A[25]:='Mehedinta';
  193.     A[26]:='Mures';
  194.     A[27]:='Neamt';
  195.     A[28]:='Olt';
  196.     A[29]:='Prahova';
  197.     A[30]:='Satu Mare';
  198.     A[31]:='Salaj';
  199.     A[32]:='Sibiu';
  200.     A[33]:='Suceava';
  201.     A[34]:='Teleorman';
  202.     A[35]:='Timis';
  203.     A[36]:='Tulcea';
  204.     A[37]:='Vaslui';
  205.     A[38]:='Valcea';
  206.     A[39]:='Vrancea';
  207.     A[40]:='Bucuresti';
  208.     A[41]:='Bucuresti Sectorul 1';
  209.     A[42]:='Bucuresti Sectorul 2';
  210.     A[43]:='Bucuresti Sectorul 3';
  211.     A[44]:='Bucuresti Sectorul 4';
  212.     A[45]:='Bucuresti Sectorul 5';
  213.     A[46]:='Bucuresti Sectorul 6';
  214.     A[51]:='Calarasi';
  215.     A[52]:='Giurgiu';
  216.  
  217.  
  218.  
  219.  
  220.  
  221.         textbackground(7);
  222.         clrscr;
  223.         textcolor(0);
  224.         desen;
  225.                 {afisam meniul initial}
  226.         gotoxy(20,6);
  227.  
  228.         for i:=25 to 56 do begin
  229.         gotoxy(i,7);
  230.         write(char(196));
  231.         end;
  232.  
  233.         for i:=25 to 56 do begin
  234.         gotoxy(i,15);
  235.         write(char(196));
  236.         end;
  237.  
  238.         gotoxy(24,7);
  239.         write(char(218));
  240.         gotoxy(24,15);
  241.         write(char(192));
  242.  
  243.         for i:=8 to 14 do begin
  244.         gotoxy(24,i);
  245.         write(char(179));
  246.         end;
  247.  
  248.         gotoxy(56,7);
  249.         write(char(191));
  250.         gotoxy(56,15);
  251.         write(char(217));
  252.  
  253.         for i:=8 to 14 do begin
  254.         gotoxy(56,i);
  255.         write(char(179));
  256.         end;
  257.  
  258.         gotoxy(31,8);
  259.         textbackground(11);
  260.         write('   -Data nasterii-   ');
  261.         textbackground(7);
  262.         gotoxy(35,10);
  263.         write('   -S E X-   ');
  264.         gotoxy(29,12);
  265.         write('   -Judetul nasterii-   ');
  266.         gotoxy(30,14);
  267.         write('   -Numar de ordine-   ');
  268.  
  269.         poz:=1;
  270.         c:=#0;
  271.  
  272.         Repeat
  273.         C:=readkey;
  274.         case c of
  275.                 #72:  {sageata sus}
  276.                 begin
  277.                 if poz > 1 then dec(poz);
  278.                 end;
  279.  
  280.                 #80:  {sageata jos}
  281.                 begin
  282.                 if poz < 4 then inc(poz);
  283.                 end;
  284.  
  285.                 #13:
  286.                 begin
  287.                 verificare(CNP);
  288.                 end; end;
  289.  
  290.  
  291.         gotoxy(31,8);
  292.         write('   -Data nasterii-   ');
  293.         gotoxy(35,10);
  294.         write('   -S E X-   ');
  295.         gotoxy(29,12);
  296.         write('   -Judetul nasterii-   ');
  297.         gotoxy(30,14);
  298.         write('   -Numar de ordine-   ');
  299.  
  300.         if poz=1 then begin
  301.         gotoxy(31,8);
  302.         textbackground(11);
  303.         write('   -Data nasterii-   ');
  304.         end;
  305.  
  306.         textbackground(7);
  307.  
  308.         if poz=2 then begin
  309.         gotoxy(35,10);
  310.         textbackground(11);
  311.         write('   -S E X-   ');
  312.         end;
  313.  
  314.         textbackground(7);
  315.  
  316.         if poz=3 then begin
  317.         gotoxy(29,12);
  318.         textbackground(11);
  319.         write('   -Judetul nasterii-   ');
  320.         end;
  321.  
  322.         if poz=4 then begin
  323.         gotoxy(30,14);
  324.         textbackground(11);
  325.         write('   -Numar de ordine-   ');
  326.         end;
  327.         textbackground(7);
  328.  
  329.  
  330.     Until (c=#27);
  331.    
  332. end.
  333.  
0,0p / 0 votes
User avatar
sharky92
Bit
 
Joined: 09 Nov 2010
Status: 2

Re: Verificare, validare si extragere date din CNP

Postby v0id » 13 Jun 2011, 22:06

Precizez de la inceput ca nu am urmarit cu foarte mare atentie toate post-urile din acest topic, dar sunt cateva chestii care mi-au atras atentia.

@ori - as fi doar curios de ce ai ales sa salvezi doar CNP-ul, urmand ca pe baza lui sa extragi informatiile necesare? Ridic aceasta problema din ratiuni de performanta. Datele care acum trebuie introduse in baza de date vor trebui si citite candva (altfel de ce s-ar tine intr-o baza de date? :) ).
De exemplu, poate ti se va cere sa listezi toate persoanele nascute intr-o anumita perioada, sa zicem intre 1990 si 2000. Ce faci cand trebuie sa scrii un astfel de SELECT? Parsarea CNP-ului convertit in string, extragerea anului din fiecare CNP si verificarea daca se inscrie in plaja de valori 1990-2000? Clar nu este optim. Nici daca tratezi CNP-ul ca numar intreg si extragi cifrele ce compun anul nasterii nu cred ca va fi mult mai rapid. Daca ai zeci sau sute de mii de record-uri cam suna a belea...

Chiar daca datele vor fi greu de introdus si va exista o oarecare redundanta, poate e mai bine sa le salvezi in campuri separate. Sau varianta B - la introducerea datelor lasi user-ul sa introduca CNP-ul in interfata, dar tu in baza de date il "spargi" in campuri separate. Extragi din CNP acele date pe care le vei folosi in SELECT-uri si acelea le pui in campuri separate. Creezi indecsi pe acele campuri si ar trebui sa obtii niste SELECT-uri foarte rapide. De exemplu, daca salvezi intr-un camp data nasterii in format datetime, e mai rapid sa faci un (YearOf(DATA_NASTERII) in [1990..2000]) decat ce am descris mai sus cu parsarea pe CNP.

Eu as recomanda sa faci niste teste concrete, sa te lamuresti "pe pielea ta". Iti creezi si populezi tabelul in varianta care ai gandit-o tu. Apoi te apuci si faci niste SELECT-uri pe care le cronometrezi.
Urmatorul pas ar fi sa incerci o alta varianta de stocare a datelor, cum ar fi cea propusa de mine. Populezi din nou tabelul cu acelasi set de date ca in testul anterior si faci aceleasi SELECT-uri cronometrate, doar ca le adaptezi la noua structura a bazei de date. Ar trebui sa ai o diferenta de viteza semnificativa.

Pentru popularea tabelelor poti sa scrii un mic programel, dar important este sa ai aceleasi date in ambele tabele, pentru a nu vicia rezultatele testelor.


Inca o intrebare: nu am lucrat pana cum cu BDE, dar exista vreun motiv special pentru care l-ai ales? Cati useri vor folosi baza de date simultan (i.e. la cati clienti trebuie sa faca fata serverul)?
0,0p / 0 votes
A good coder is never on holiday - he may be working on a different machine, that's about as far as it gets.
User avatar
v0id
Word
 
Joined: 05 Jan 2010
Location: 127.0.0.1
Status: 42.5

Re: Verificare, validare si extragere date din CNP

Postby ori » 14 Jun 2011, 22:03

Salutare din nou.

v0id, pe scurt: varianta B.
In tabel nu salvez doar CNP, ci nume, prenume, adresa, cnp, sex, data nasterii, locul nasterii.

Tocmai ca sunt de folos in diverse rapoarte aceste date (vezi bold) am nevoie de a extrage aceste date din cnp, fara ca utilizatorul sa le mai scrie. Se stie ca, cu cat utilizatorul introduce manual mai multe date, cu atat creste riscul de a fi introduse date eronate. Aplicatia este desktop.
0,0p / 0 votes
User avatar
ori
Bit
 
Joined: 10 Jun 2011
Status: 0

Re: Verificare, validare si extragere date din CNP

Postby v0id » 15 Jun 2011, 11:01

ori wrote:M-am gandit ca aceste date sa le stochez intr-un tabel dbf (utilizand Delphi 7 cu BDE), sa introduc nume, prenume, adresa, CNP.
Si ca sa nu mai caut prin ditamai dosarul la data nasterii, locul nasterii etc. aceste date sa fie extrase din CNP automat si apoi sa le salvez in tabel.


Din afirmatiile tale citate de mine mai sus nu era foarte clar cum vrei sa faci - in prima zici doar de CNP, in a doua zici ca le extragi. Acum m-am linistit #:-S
0,0p / 0 votes
A good coder is never on holiday - he may be working on a different machine, that's about as far as it gets.
User avatar
v0id
Word
 
Joined: 05 Jan 2010
Location: 127.0.0.1
Status: 42.5


Return to Pascal / Delphi

Who is online

Users browsing this forum: No registered users and 0 guests