demo_luhn_checksum.f90 Source File


Source Code

       program demo_luhn_checksum
       use M_hashkeys, only : luhn_checksum
       implicit none
       character(len=:),allocatable :: ccards(:), string
       integer :: i, j
       write(*,*)'GOOD VALUES'
       ccards=[ character(len=20) :: '79927398713', &
                                   & '49927398716',&
                                   & '1234567812345670' ]
       call checkem()
       write(*,*)'BAD VALUES'
       ccards=[ character(len=20) :: &
         & '79927398710', '79927398711', '79927398712', '79927398714',  &
         & '79927398715', '79927398716', '79927398717', '79927398718',  &
         & '79927398719',  &
          '49927398717', '1234567812345678' ]
       call checkem()
       contains
       subroutine checkem
          ! validate these numbers
          do i=1,size(ccards)
             j=len(trim(ccards(i)))
             string=luhn_checksum(ccards(i)(:j-1))
             write(*,'(a,1x,a,1x,l1)')ccards(i),string,ccards(i).eq.string
          enddo

          string='123456 781-234-567'
          write(*,*)'from ',string,' got ',luhn_checksum(string), &
          & ' which should be 1234567812345670'
       end subroutine checkem
       end program demo_luhn_checksum