summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2018-09-13 21:06:24 +0300
committerLars Wirzenius <liw@liw.fi>2018-09-13 21:06:24 +0300
commit7fe8991f0992f407a70ea0bbb6eae79ae40733cd (patch)
treeaa8d9b8e96db781a9c593cc06451164fde56fd29
parent5bc15a22afdb8ebfad3d089f81b157811d4f6879 (diff)
downloadlasku-master.tar.gz
Add: viite.pyHEADmaster
-rw-r--r--viite.py38
1 files changed, 38 insertions, 0 deletions
diff --git a/viite.py b/viite.py
new file mode 100644
index 0000000..9de187d
--- /dev/null
+++ b/viite.py
@@ -0,0 +1,38 @@
+import itertools
+
+
+def group(digits, n):
+ while len(digits) >= n:
+ yield digits[-n:]
+ digits = digits[:-n]
+ yield digits
+
+
+def viitenumero(perus):
+ perus = ''.join(perus.split())
+ assert 4 <= len(perus) <= 20
+ assert all(c.isdigit() for c in perus)
+
+ digits = [ord(c) - ord('0') for c in perus]
+ factors = itertools.cycle([1, 3, 7])
+
+ total = sum(a * b for a, b in zip(digits, factors))
+
+ check = 10 - (total % 10)
+ if check == 10:
+ check = 0
+
+ result = digits + [check]
+ result = ['%d' % digit for digit in result]
+ result = list(reversed(list(group(result, 5))))
+ result = [''.join(g) for g in result]
+ result = ' '.join(result)
+ return result
+
+
+if __name__ == '__main__':
+ import sys
+ for x in sys.argv[1:]:
+ print(viitenumero(x))
+
+assert(viitenumero('201803') == '20 18032')