✉️ Saņem šito visu e-pastā. Tā vietā, lai palaistu garām kaut ko no tā, ko es rakstu savā blogā, tagad vari pierakstīties un saņemt e-pastā visu, ko es te rakstu. Tas nav bieži.

← Uz sākumu

Personas kods vai uzņēmuma reģistrācijas numurs?

2008. gada 31. jūlijā, 40 komentāri

Šodien uzradās viena empīriska rakstura problēma. Ir automatizēti jāapstrādā dati, no kuriem nepieciešams izlobīt to, vai uzrādītā persona ir privātpersona vai juridiska. Diemžēl, apstrādājamajos datos privātpersonām personas koda viducī ne vienmēr gozējas strīpiņa. Tādējādi - kā reģistrācijas numurs, tā arīdzan personas kods sastāv no 11 cipariem. Ko darīt?

Pirmais galvā ienākušais risinājums ir personas koda pārbaudes algoritms. Ir tāds viens, kurš pēc pirmajiem desmit koda cipariem izrēķina to, kādam jābūt pēdējam. Diemžēl, savulaik valsts iestādē strādājot, iznāca uzrauties uz personas, kurai šī tā dēvētā "čeksumma" nebija korekta un neatbilda algoritmam. Protams, iespējamība sastapties ar tādu kodu vēlreiz, ir diezgan niecīga. Tomēr pastāv.

Bet, kā atklāsme pār manu galvu nāca otrs risinājums. Personas kodā pirmie divi cipari norāda dzimšanas datumu. Tas nozīmē, ka pirmais cipars būs 0, 1, 2, vai 3. Uzņēmumiem reģistrācijas numuri visbiežāk sākas ar 4, 5, vai 9, bet nekad ar 0, 1, 2, vai 3. Tadā, tipa :)

Problēma, kā rādās, atrisināta. Vai arī, iespējams, nav? Jūsu domas?

Tu atbildi augstāk redzamajam komentāram. Atcelt

Gravatar Runcis

2008. gada 31. jūlijā, plkst. 16:45

"empīriska rakstura problēma" - mēģināju izprast šo vārdu savienojumu, bet nesanāca :)

Gravatar Didulis

2008. gada 31. jūlijā, plkst. 16:59

Nebūtu prātīgāk pārbaudīt visus pirmos 6 simbolus, kas kā nekā ir datums un tur kļūda būs vēl niecīgāka. <?php $code = str_replace('-', '', $code); // droši paliek nedroši, ja nu ir svītriņa; Vēl drošāk caur regexp, kas visus neciparus pārvērš par tukšumu; $date = floor($code / pow(10, 5)); // iegūstam pirmos 4 simbolus; $day = floor($date / pow(10, 4)); // datums; $month = floor($date / 100) - ($day * 100); // mēnesis; $year = $date % 100; // gads; $year += ($year

Gravatar Vilx-

2008. gada 31. jūlijā, plkst. 16:59

Varbūt labāk pārbaudi, ka pirmie 6 cipari veido valīdu datumu? Principā sanāks tas pats, tikai vēl mazliet drošāk. Vai arī moš kaut kā automatizēti to var uzprasīt Lursoftam?

Gravatar bubu

2008. gada 31. jūlijā, plkst. 17:01

Empīriski nozīmē praktiski nevis teorētiski. Tb kaut kādi secinājumi/lēmumi pamatojoties uz novērotām parādībām/procesiem/datiem.

Papildus dzimšanas datuma formātam moš var arī pārbaudīt vārda/nosaukumu atbilstību cilvēka vārdam, tipa lai tur nav nekādi SIA vai tml, ne?

Gravatar spridis

2008. gada 31. jūlijā, plkst. 17:14

man jau liekas, ka ar 4, 5, 9 pārbaudi pietiek.

Gravatar werd

2008. gada 31. jūlijā, plkst. 17:27

laacz, tas risinājums, ar to, ka personas koda pirmais cipars vienmēr būs 0,1,2 vai 3 ir labs, bet vai tu esi iekļāvis iespēju, ka uzņēmuma reģistrācijas kods ir uzņēmuma vadītāja personas kods? Šajos gadījumus noteikt vai persona ir juridiska vai fiziska, nebūs iespējams.

Gravatar usver

2008. gada 31. jūlijā, plkst. 17:32

ar checkdate() pārbaudīt, vai ir lietojams personas koda iesākums. ja ir citi dati - var piemeklēt substringus, kas norāda uz iestādēm ( tjipa http://paste.php.lv/7743)

čeksummas pārbaudi var atstāt kā pēdējo argumentu - ja vārds un uzvārds ir, pēc firmas neizskatās bet čeksumma nesakrīt - sūtīt mailu adminam. galu galā - jebkurā sistēmā ir taču iespēja nosūtīt mailu sistēmas atbildīgajai personai ar tekstu "ienākuši grūti saprotami dati, lūdzam uzmest aci" - jo cilvēks tomēr ir un paliek saprātīgs. :)

Gravatar Glupais

2008. gada 31. jūlijā, plkst. 17:35

Risinājums uz īsu laiku, jo iedzīvotāju reģistrs gatavojas personas kodu pārģenerācijai uz jauniem, kuros nebūtu norādīti personas dzimšanas dati.

Gravatar archaic

2008. gada 31. jūlijā, plkst. 17:47

Nav, jo ir tādi individuālie komersanti, kur personas kods ir vienlaikus reģistrācijas numurs komercreģistrā.

Gravatar Rumpis

2008. gada 31. jūlijā, plkst. 17:54

Glupais - vai tas pēc plašu sieviešu masu lūguma jeb nopietni? Drusku dīvaina šī ziņa šķiet, jo milzums dokumentu tak iraid ar tagadējiem kodiem.

Gravatar q

2008. gada 31. jūlijā, plkst. 17:57

pirmie 6 cipari veido datumu, kā jau visi to zin attiecīgi pirmajiem 6 cipariem jābūt korektam datumam :) Ko veido 7 cipars var izdomāt paskatoties uz savu un sava bērna, kas dzimis pēc 2000 gada kodu :) Ja cheksumma nestrādā tādā gadījumā šī persona vai nu melo par savu personas kodu, vai arī tas ir kļūdaino norakstīts no pases. Vispār es šādu personu kā spiegu izdotu attiecīgām iestādēm :) Pastāv ideja, kā nākotnē varētu tikt vaļā no PK, kuros ir dzimšanas datums.

Gravatar q

2008. gada 31. jūlijā, plkst. 17:59

Precizēju - nākotnē datums nebūs jaundzimušo kodos nu un potenciāli ja kāds nomainīs savu. Bet nedomaju, ka tā būs spiesta lieta, jo izdevumus jau nu valsts par to neapmaksās :D

Gravatar waldis

2008. gada 31. jūlijā, plkst. 18:20

tieši tā - nav, jo pašnodarbinātajem reģ nr = pk tikai bez svītras

Gravatar evin

2008. gada 31. jūlijā, plkst. 18:31

vispār jau drošvien atkarīgs arī, kādām vajadzībām jānosaka fiziska vai juridiska persona. ja saistībā ar nodokļiem, iespējams ka fiziskās personas, kas reģistrējas VID kā nodokļu maksātāji bez reģistrēšanās UR (reģistrācijas numurs = personas kods bez "-"), būtu jāuztver kā "juridiskas" personas.

Gravatar es

2008. gada 31. jūlijā, plkst. 19:02

parasti jau visas formas, kuras prasa aizpildit ir ailite, kura janorada - juridiska vai fiziska persona. Un nedaudz divainas ir tas organizacijas, kuras tas nav, jo tam liekas tas mazsvarigi. Ta, ka - ja tads lauks ir - nav problemu

Gravatar snpz

2008. gada 31. jūlijā, plkst. 20:55

Eeee, vai tik tā nebija ar Aiku kopīgi radīta "apgaismība"?:D

Gravatar Lycan

2008. gada 31. jūlijā, plkst. 21:59

tauta ja kāds zin to algoritmu ar cheksummu ta ludzu iepostējat, man noderēs

Gravatar rbm

2008. gada 31. jūlijā, plkst. 22:27

tā arī ir 0,1,2,3 ir privātpersonas 4,5,6 uzņēmumi 9 valsts un pašvaldības

tā vismaz nesen man tika skaidrots

Gravatar dairis

2008. gada 31. jūlijā, plkst. 23:32

Vai nevar uztaisīt http pieprasījumu uz lursoft vai līdzīga reģistra lapu un pajautāt vai tāds numurus ir juridiska persona vai nav.

protams tas jau būtu ūber zolīdi, bet nemācēšu pateikt vai lursofts tādu fīču piedāvā.

Gravatar archaic

2008. gada 31. jūlijā, plkst. 23:42

Lycan: kuat kur laacz lapas dzīlēs ir raksts, kura komentāros aloritms ir.

http://laacz.lv/2006/11/25/pk-parbaudes-algoritms/

Gravatar BIBO

2008. gada 1. augustā, plkst. 08:45

laacz, saki man tā, vai personas koda pārbaudes algoritms neskaitās valsts noslēpums? Vismaz, man strādājot attiecīgajā valsts iestādē, neizdevās savās ķepās aptaustīt viņu.

Gravatar Peeteriz

2008. gada 1. augustā, plkst. 08:52

Principā firmām pirmais cipars atkarībā no uzņēmuma veida ir 4,5,6 vai 9; bet ir diezgan daudz uzņēmēju - gan lauksaimniecībā, gan liela daļa no advokātu un arhitektu birojiem - kur uzņēmuma reģ.nr. sakrīt ar attiecīgā cilvēka personas kodu.

Gravatar ramm

2008. gada 1. augustā, plkst. 09:39

pazvani uz UR un uzprasi vai sia reg nr ir algoritms....

man liekas ka sia vienmēr sākas ar 4000 ... ?!?

Gravatar gaajugaraam

2008. gada 1. augustā, plkst. 09:40

kopš neseniem laikiem personas kods drīkst sākties ar jebkuru ciparu, iespējamais septītais ir atkarīgs no dzimšanas gadsimta (savlaik no PID saņemtais algoritms bija visai universāls arī uz perskodiem kuri kārās uz inetā atrodajamajiem kalkulatoriem) p.s. ja tev ir oficiāla iestāde, tad jau Tu vari par tiem 100 vai cik tur sudraba grašiem iepirkt to čekeri. vienīgi tas neatrisina problēmu - fiz. vs jur persona

Gravatar aaa

2008. gada 1. augustā, plkst. 09:43

<code> public static boolean IsValidPK(String aValue) {

    if (aValue.length() != 12)
        return false;

    try {
        int chksum = 
            1 * Integer.parseInt(Character.toString(aValue.charAt(0))) + 
            6 * Integer.parseInt(Character.toString(aValue.charAt(1))) + 
            3 * Integer.parseInt(Character.toString(aValue.charAt(2))) + 
            7 * Integer.parseInt(Character.toString(aValue.charAt(3))) + 
            9 * Integer.parseInt(Character.toString(aValue.charAt(4))) + 
            10 * Integer.parseInt(Character.toString(aValue.charAt(5))) + 
            5 * Integer.parseInt(Character.toString(aValue.charAt(7))) + 
            8 * Integer.parseInt(Character.toString(aValue.charAt(8))) + 
            4 * Integer.parseInt(Character.toString(aValue.charAt(9))) + 
            2 * Integer.parseInt(Character.toString(aValue.charAt(10)));
        if ((1101 - chksum) % 11 == 
            1 * Integer.parseInt(Character.toString(aValue.charAt(11))))
            return true;
        else
            return false;
    } catch (Exception e) {
        return false;
    }

}</code>

Gravatar gaajugaraam

2008. gada 1. augustā, plkst. 09:48

perskoda pārbaudes algoritms nav valsts noslēpums, noslēpums varētu būt perskoda ģenerācijas algoritms

Gravatar Evalc

2008. gada 1. augustā, plkst. 11:43

E-pakalpojums: Pārbaude, vai persona ir iekļauta Iedzīvotāju reģistrā un vai nav ziņu par personas nāvi (EP28) Maksājumi: Bezmakasas

https://www.latvija.lv/LV/LDV/EServiceDescription.aspx?srvid=URN:IVIS:100001:EP-EP28-v1-0

Gravatar flipo

2008. gada 1. augustā, plkst. 12:00

werd.. fiziska persona ir fiziska persona, tā nevar būt juridiska persona. cits jautājums ir, kad fiziska persona ir nodokļu maksātājs!

Gravatar sn

2008. gada 1. augustā, plkst. 12:34

kāda vaina no http://paste.php.lv/7749/nonum izmantošanas pers koda validēšanā?

es pagaidām neesmu atradis PK, kurš nevalidētos, tev varbūt bija drukas kļūda iesniegtajos datos? tad jau bij jāiet uz valsts iestādēm un jāsaka, ka viņi nepareizu pk iedevuši personai :)

Gravatar Vērotājs

2008. gada 1. augustā, plkst. 12:51

iespējams der šāds risinājums: personas koda lauku sadalīt 2 daļās - līdz ar to nebūs problēmu ar strīpiņām.

Gravatar usins

2008. gada 1. augustā, plkst. 18:56

A vai tad personas kodam xxxxxx-yyyxx, kur yyy var buut tikai Latvijas pasu nodalju numurinji- tas ir kur izdots.... piem 128, 152 utt... kjipa pec tiem sk var noteikt kur ir izsniegta pase... varetu tak pec shiem kriteerijiem to izdariit, bet nu ar, sameeraa gruuti- tad ir jaieviesh taa "-" ziime kaa obligaata, un tad dziive atvieglota, bet ej un labo visus ieprieksheejos...

Gravatar modric

2008. gada 2. augustā, plkst. 00:39

ja SW taisi tādam lietotājam, kas var tikt pie sistēmas KAKTUSS, fixi noskaidrosi, vai tā ir legāla LV fiziska persona.

to lieto tais mazajās stikla būdiņās RIX un visur citur, kur vajag oficiāli pārbaudīt piederību pie LV fizisko personu loka, bet pieder tā padarīšana laikam jau taču PID`am

Gravatar modric

2008. gada 2. augustā, plkst. 00:44

usins 32 - principā tev taisnība, taču tik vienkārši tas nav, jo ar 5 cipariem tad sen jau nepietiktu - bet vai nu man te programmeriem jāstāsta, ar kādiem algoritmiem to tomēr var panākt :)

Gravatar modric

2008. gada 2. augustā, plkst. 17:19

sorre - mans iepr.(34) kaments nav korekts - pietiek & pāri paliek ar 5 zīmēm... :)

nodaļas # + n.p.k. TAJĀ datumā dzimušajiem, kas tajā nodaļā reģistrējušies, un tādu jau nav daudz, var pat 1 zīmi tik atstāt + vēl 1 zīme checksum.

atcerējos, ka sen apakaļ kautkādu SW taisot, dabūjām pat tās checksum algoritmu, lai varētu ievada kļūdas ķert.

PS nav arī nekāds noslēpums pārējo šito kodu chekcum algoritmi - uzņēmuma RegNo, IBAN utt

Gravatar elfz

2008. gada 3. augustā, plkst. 14:05

Čeko pirmos septiņus ciparus atbilstībai datumam, un satiekot ticamu datumu, asjūmo, ka tas ir personas kods un pārbaudi kontrolsummu: ja der, tad točna personas kods, ja neder, tad pielogo malā paskatīties pēc tam.

Tev nav kaut kādi papilddati, vārdsuzvārds vs uzņēmuma nosaukums, pēc kuriem varētu empīriski izurbināt, ka "šis nekādā gadījumā nav privātpersona", or something?

Gravatar bulletproof_cupid

2008. gada 4. augustā, plkst. 11:52

@modric: Ja LR uzņēmumu reģistrācijas numuru pārbaudes algoritms nav noslēpums, vai nevari iedot norādi kur to var uzzināt? Lieti noderētu darbā. :)

Gravatar nazis

2008. gada 4. augustā, plkst. 17:03

Ja kas: http://alvils.latvietis.com/index.cgi?action=5&amp;id=112 Personas koda validators

Un personas koda pirmajai daļai nebūt nav jābūt dzimšanas datumam.

Gravatar Verdi

2013. gada 14. februārī, plkst. 14:09

http://www.lvportals.lv/print.php?id=248652 Bet mēs zinām, ka pēdējais no 4 cipariem ir algoritma pareizības pārbaude, tātad atklāti paliek noskaidrot 8,9 un 10 cipara nozīmi. Tie noteikti nav nejauši cipari.