Kirjoittaja: Chiman
Kirjoitettu: 05.12.2012 – 05.12.2012
Tagit: teksti, yhteiskunta, koodi näytille, vinkki, yleispätevä
Viitenumerolaskuri täydentää annetun numerosarjan suomalaiseksi viitenumeroksi lisäämällä perään tarkistenumeron.
Koodi on tehty yksinkertaiseksi, jotta se toimisi mahdollisimman hyvin 2- ja 3-sarjan Python-versioilla.
#!/usr/bin/env python # -*- coding: utf-8 -*- # viitenumero.py def viitenumeron_tarkiste(viitenumero_raaka): """palauta annetun tarkisteettoman viitenumeron perään kuuluva tarkistenumero""" kertoimet = (7, 3, 1) viitenumero_raaka = viitenumero_raaka.replace(' ', '') nrot_kaanteinen = map(int, viitenumero_raaka[::-1]) tulosumma = sum(kertoimet[i % 3] * x for i, x in enumerate(nrot_kaanteinen)) return (10 - (tulosumma % 10)) % 10 def viitenumero_ok(viitenumero): """tarkista vastaako lopun tarkistenumero viitenumeron alkuosaa""" return viitenumeron_tarkiste(viitenumero[:-1]) == int(viitenumero[-1]) def jaa_ryhmiin_oikealta(s, n): """palauta merkkijono s eroteltuna n merkin ryhmiin, välilyönti erottaa Ryhmittely aloitetaan oikeasta reunasta. Esimerkki: s='1234567890', n=4 palauttaa '12 3456 7890' """ kaannetty = s[::-1] osat = [(' ' if i and i % n == 0 else '') + c for i, c in enumerate(kaannetty)] return ''.join(osat)[::-1] def testit(): assert viitenumeron_tarkiste('1662') == 5 assert viitenumero_ok('16625') assert jaa_ryhmiin_oikealta('966846848', 5) == '9668 46848' print('testit ok') if __name__ == '__main__': from sys import argv if len(argv) == 2: # oleta argumentiksi viitenumero ilman tarkistetta, tulosta tarkisteen kanssa viite_raaka = argv[-1] tarkiste = viitenumeron_tarkiste(viite_raaka) viite = viite_raaka + str(tarkiste) print(jaa_ryhmiin_oikealta(viite, 5)) else: testit() print('Anna argumenttina viitenumero ilman tarkistetta')
Käyttö komentoriviltä:
python viitenumero.py 1234567
tulostaa:
123 45672