Report abuse


			
# Validera ett svenskt personnummer i Ruby
# jonelf@gmail.com
require 'date.rb'
pnum=ARGV[0]
if pnum==nil then
  print "Ange personnummer som yyyyMMddcccc.\n"
  exit
elsif pnum.length!=12 then
  print "Det skall vara 12 siffror."
else
  begin
  date=DateTime.strptime(pnum[0,4] +'-'+ pnum[4,2] +'-'+ pnum[6,2], '%F')
  rescue ArgumentError => argerr
    printf("%s är inte ett riktigt datum.\n", pnum[0,8])
    exit
  rescue Exception => ex
    print ex.to_s
    exit
  end

  checksum=0
  pos=0

  n=0
  0.upto(9) do |pos|
    n=pnum[pos+2].to_i-48
    if pos%2==0 then
      checksum+=(n*2).modulo(9)+(n/9)*9
    else
      checksum+=n
    end
  end

  if checksum%10==0 then
    print "Personnumret har ett korrekt datum och en korrekt checksumma.\n"
  else
    printf("Personnumret är inte korrekt. Checksumman skall vara jämnt delbar med 10 men är %d.\n", checksum)
  end
end