Koodipätkä tekee viitenumeron esim laskun numerosta
$viite = viitenumero("12345"); // 123453
Viitenumero muodostetaan seuraavalla tavalla:
- Tarkistettavan viitteen numerot kerrotaan oikealta vasemmalle painoarvoilla 7,3,1,7,3,1,...
- Kertotulot lasketaan yhteen ja summa vähennetään seuraavasta täydestä kymmenestä.
- Erotus on tarkiste, joka tulostetaan viitteen viimeiseksi numeroksi.
Huom. Viitenumeron sallittu enimmäispituus on 19 + 1 (tarkiste)
function viitenumero($laskunro){ if(strlen($laskunro) > 19) return 0; $kertoimet = array('7','3','1','7', '3','1','7','3','1','7','3','1','7','3','1','7','3','1','7'); $tarkiste = 0; $j = 0; $tmp = $laskunro; settype($tmp, "string"); for($i=strlen($tmp)-1; $i>-1; $i--){ $tarkiste = $tarkiste + $kertoimet[$j++] * intval(substr($tmp, $i, 1)); } $tarkiste = ceil($tarkiste / 10) * 10 - $tarkiste; $viite = "$laskunro$tarkiste"; return $viite; }
Turhaa tehä uutta muuttujaa tuosta $laskunro:sta ($tmp = $laskunro;). On myös turhaa käyttää settype() funktiota sen muuttamiseksi stringiksi, pelkät lainausmerkit riittää.
myös intval() on äärettömän turha. (int)"luku" toimii myös.
2 viimeistä riviä funktion lopusta voisi muuttaa yhdeksi riviksi.
PHP tagit vois lisätä..
No huh, Olipas negatiivista palautetta :D
Älä kuitenkaan pahastu :P
Lisäksi moduloimalla i:n arvoa saataisiin selville käytetäänkö kerrointa 7, 3 vai 1 jolloin myös array on turha. Lisäksi kääntämällä merkkijonon ympäri strrev:llä, ei tarvitse käyttää substr vaan $merkkijono{$i} toimii kiltisti (jos for-loopin i=0 ja kasvaa). Mutta hyvä ja tarpeellinen, olisi säästänyt minulta tuntien työn (lähinnä viitenumeron laskemiskaavan löytämisongelma) jos tämä olisi ollut pohjana.
PS: Myös ryhmittely olisi hyvä saada mukaan, ei tarvitsisi pähkäillä missä kohden on menossa kun viite on 1948729234246 :)
Menit sitten kuhasta kopsaamaan?
Ihan kiva koodi, mutta useammalle varmaan ihan turha. Ellei sitten koodaa jonllekkin pankille sivuja.
OFFTOPIC:
lainaus:
Menit sitten kuhasta kopsaamaan?
Miksi heti ekana pitää syyttää kopioinnista? Et sitten vaivautunu kattoon kuka tän oli kuhaan postannu? Sama juttu tais olla tossa Juhis^:n uploadi-vinkin kanssa. ( https://www.ohjelmointiputka.net/koodivinkit/
>Ihan kiva koodi, mutta useammalle varmaan ihan turha. Ellei sitten koodaa jonllekkin pankille sivuja.
Ihan hyvä vinkki mm. niille, jotka kehittelee esim. webbikauppaa, joka generoi viitenumeron laskuun suoraan.
Tai vaikka webbipohjaista laskutusohjelmaa.
Ei sen tarvii mikään pankin sivu olla.
ZaLaMaNDeR = stere
Vai onko totta että täällä on kaksi yhtä tyhmää ihmistä?
ja kerran T.M hoksas syyttää mua tuukka_91:seksi :D:D hahhahhah ja sano että oli kysyny Laaksoseltaki niin tarkistin asian.. :D:D:D
Onpas tänään hauskaa porukkaa putkassa :)
Viitenumero pitää vielä lajitellakin eli yhdessä ryhmässä on x numeroa ja seuraavassa ryhmässä taas x numeroa jne jne.
Ei muuta kuin hieman rustaat lisää, niin on ihan kätsä...
Tuolla olisi yksi aiheeseen liittyvä viritys:
Aihe on jo aika vanha, joten et voi enää vastata siihen.