Data update
This commit is contained in:
parent
4bb20c9b71
commit
cbaf4c4b64
12390 changed files with 318560 additions and 27248 deletions
113
Task/Verhoeff-algorithm/REXX/verhoeff-algorithm.rexx
Normal file
113
Task/Verhoeff-algorithm/REXX/verhoeff-algorithm.rexx
Normal file
|
|
@ -0,0 +1,113 @@
|
|||
/* REXX implementation of the Verhoeff Algorithm */
|
||||
Call init -- fill the tables (data taken from Java Script)
|
||||
Call check 236,1 -- compute check digit AND validate numbers
|
||||
Call check 12345,1 -- "
|
||||
Call check 123456789012,0 -- validate numbers
|
||||
Exit
|
||||
|
||||
check:
|
||||
Parse Arg number,details
|
||||
numberx=number
|
||||
Say 'Check digit calculations for' number
|
||||
d=compute(number||0,details,1)
|
||||
Say 'The check digit for' numberx 'is' d
|
||||
Call check2 numberx||d,details
|
||||
Call check2 numberx||9,details
|
||||
Return
|
||||
|
||||
check2:
|
||||
Parse Arg number,details
|
||||
If details Then
|
||||
Say 'Validation calculations for' number
|
||||
d=compute(number,details,0)
|
||||
If d=0 Then
|
||||
Say 'The validation for' number' is correct.'
|
||||
Else
|
||||
Say 'The validation for' number' is incorrect.'
|
||||
Return
|
||||
|
||||
compute:
|
||||
Parse Arg number,details,show_inv
|
||||
Call details ''
|
||||
Call details ' i ni p[i, ni] c'
|
||||
Call details '-------------------'
|
||||
c=0
|
||||
le=length(number)-1
|
||||
Do i=le To 0 By-1
|
||||
ni=substr(number,i+1,1)
|
||||
z=(le-i)//8
|
||||
pi=perm.z.ni
|
||||
c=mult.c.pi
|
||||
Call details right(le-i,2) right(ni,2) right(pi,7) right(c,5)
|
||||
End
|
||||
If show_inv Then
|
||||
Call details "inverse["c"] = "invt.c
|
||||
Return invt.c
|
||||
|
||||
details:
|
||||
If details Then
|
||||
Say arg(1)
|
||||
Return
|
||||
|
||||
init:
|
||||
Call mk_mult '[[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]',
|
||||
' [1, 2, 3, 4, 0, 6, 7, 8, 9, 5]',
|
||||
' [2, 3, 4, 0, 1, 7, 8, 9, 5, 6]',
|
||||
' [3, 4, 0, 1, 2, 8, 9, 5, 6, 7]',
|
||||
' [4, 0, 1, 2, 3, 9, 5, 6, 7, 8]',
|
||||
' [5, 9, 8, 7, 6, 0, 4, 3, 2, 1]',
|
||||
' [6, 5, 9, 8, 7, 1, 0, 4, 3, 2]',
|
||||
' [7, 6, 5, 9, 8, 2, 1, 0, 4, 3]',
|
||||
' [8, 7, 6, 5, 9, 3, 2, 1, 0, 4]',
|
||||
' [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]]'
|
||||
|
||||
Call mk_invt '[0, 4, 3, 2, 1, 5, 6, 7, 8, 9]'
|
||||
|
||||
Call mk_perm '[[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]',
|
||||
' [1, 5, 7, 6, 2, 8, 3, 0, 9, 4]',
|
||||
' [5, 8, 0, 3, 7, 9, 6, 1, 4, 2]',
|
||||
' [8, 9, 1, 6, 0, 4, 3, 5, 2, 7]',
|
||||
' [9, 4, 5, 3, 1, 2, 6, 8, 7, 0]',
|
||||
' [4, 2, 8, 6, 5, 7, 3, 9, 0, 1]',
|
||||
' [2, 7, 9, 3, 8, 0, 6, 4, 1, 5]',
|
||||
' [7, 0, 4, 6, 9, 1, 3, 2, 5, 8]]'
|
||||
Return
|
||||
|
||||
mk_mult:
|
||||
Parse Arg list
|
||||
list=translate(list,' ','[],')
|
||||
Do i=0 to 9
|
||||
Do j=0 to 9
|
||||
Parse Var list mult.i.j list
|
||||
End
|
||||
End
|
||||
Return
|
||||
|
||||
mk_invt:
|
||||
Parse Arg list
|
||||
list=translate(list,' ','[],')
|
||||
Do i=0 to 9
|
||||
Parse Var list invt.i list
|
||||
End
|
||||
Return
|
||||
|
||||
mk_perm:
|
||||
Parse Arg list
|
||||
list=translate(list,' ','[],')
|
||||
Do i=0 to 9
|
||||
Do j=0 to 9
|
||||
Parse Var list perm.i.j list
|
||||
End
|
||||
End
|
||||
Return
|
||||
|
||||
show_mult:
|
||||
If details Then Say'show_mult'
|
||||
Do i=0 To 9
|
||||
l=''
|
||||
Do j=1 To 9
|
||||
l=l mult.i.j
|
||||
End
|
||||
Call details l
|
||||
End
|
||||
return
|
||||
Loading…
Add table
Add a link
Reference in a new issue