class SwedishPIN::Generator

@private @api private

Generator for PINs.

Attributes

date[R]

The date all generated PINs will be based on.

Public Class Methods

new(date) click to toggle source

Creates a new generator for a particular date.

# File lib/swedish_pin/generator.rb, line 15
def initialize(date)
  @date = date || random_date
end

Public Instance Methods

generate(sequence_number) click to toggle source

Generate a {Personnummer} with the given sequence number.

# File lib/swedish_pin/generator.rb, line 20
def generate(sequence_number)
  sequence_number ||= random_sequence_number
  Personnummer.new(
    year: date.year,
    month: date.month,
    day: date.day,
    sequence_number: sequence_number,
    control_digit: control_digit(sequence_number)
  )
end

Private Instance Methods

control_digit(sequence_number) click to toggle source
# File lib/swedish_pin/generator.rb, line 41
def control_digit(sequence_number)
  padded = ("%03d" % sequence_number)
  SwedishPIN.luhn("#{date.strftime("%y%m%d")}#{padded}")
end
random_date() click to toggle source
# File lib/swedish_pin/generator.rb, line 33
def random_date
  Date.today - Random.rand(0..(110 * 365))
end
random_sequence_number() click to toggle source
# File lib/swedish_pin/generator.rb, line 37
def random_sequence_number
  Random.rand(0..999)
end