Reklāma:

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

Š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?

Šie ir tie 38 komentāri

    • #1. 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 :)

    • Saite uz šo komentāru
    • #2. 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

    • Saite uz šo komentāru
    • #3. 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?

    • Saite uz šo komentāru
    • #4. 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?

    • Saite uz šo komentāru
    • #6. 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.

    • Saite uz šo komentāru
    • #7. 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. :)

    • Saite uz šo komentāru
    • #8. 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.

    • Saite uz šo komentāru
    • #9. 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ā.

    • Saite uz šo komentāru
    • #10. 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.

    • Saite uz šo komentāru
    • #11. 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.

    • Saite uz šo komentāru
    • #12. 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

    • Saite uz šo komentāru
    • #13. waldis 2008. gada 31. jūlijā, plkst. 18:20
    • tieši tā – nav, jo pašnodarbinātajem reģ nr = pk tikai bez svītras

    • Saite uz šo komentāru
    • #14. 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.

    • Saite uz šo komentāru
    • #15. 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

    • Saite uz šo komentāru
    • #17. 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

    • Saite uz šo komentāru
    • #19. 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

    • Saite uz šo komentāru
    • #20. 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ā.

    • Saite uz šo komentāru
    • #22. 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.

    • Saite uz šo komentāru
    • #23. 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.

    • Saite uz šo komentāru
    • #24. 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 … ?!?

    • Saite uz šo komentāru
    • #25. 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

    • Saite uz šo komentāru
    • #26. aaa 2008. gada 1. augustā, plkst. 09:43
    • 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;
      }

      }

    • Saite uz šo komentāru
    • #27. 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

    • Saite uz šo komentāru
    • #29. 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!

    • Saite uz šo komentāru
    • #30. 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 :)

    • Saite uz šo komentāru
    • #31. 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.

    • Saite uz šo komentāru
    • #32. 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…

    • Saite uz šo komentāru
    • #33. 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

    • Saite uz šo komentāru
    • #34. 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 :)

    • Saite uz šo komentāru
    • #35. 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

    • Saite uz šo komentāru
    • #36. 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?

    • Saite uz šo komentāru
    • #37. 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ā. :)

    • Saite uz šo komentāru

Moderācija: Daži vārdi var gadīties, ka ir iz melnās listes (viagra and stuff). Tādi komentāri tiek aizturēti, pirms parādās lapā. Ja Tavs komentārs neparādās uzreizi, būs vien jāpagaida, līdz es jamo izlasīšu. Protams, ka paturu tiesības sev netīkošos komentārus dzēst, iemeslu neminot.