Sha256: a47d20ff330beaf89252f985492e7338a53763810590f43c9e35a8bed94ff5d4

Contents?: true

Size: 1.73 KB

Versions: 11

Compression:

Stored size: 1.73 KB

Contents

class IsinValidator < ActiveModel::EachValidator

  def validate_each(record, attribute, value)
    unless valid?(value)
      record.errors[attribute] << (options[:message] || I18n.t('flash_validators.errors.messages.isin'))
    end
  end

  private

  def valid_format?(value)
    value =~ /^((AF|AX|AL|DZ|AS|AD|AO|AI|AQ|AG|AR|AM|AW|AU|AT|AZ|BS|BH|BD|BB|BY|BE|BZ|BJ|BM|BT|BO|BQ|BA|BW|BV|BR|IO|BN|BG|BF|BI|KH|CM|CA|CV|KY|CF|TD|CL|CN|CX|CC|CO|KM|CG|CD|CK|CR|CI|HR|CU|CW|CY|CZ|DK|DJ|DM|DO|EC|EG|SV|GQ|ER|EE|ET|FK|FO|FJ|FI|FR|GF|PF|TF|GA|GM|GE|DE|GH|GI|GR|GL|GD|GP|GU|GT|GG|GN|GW|GY|HT|HM|VA|HN|HK|HU|IS|IN|ID|IR|IQ|IE|IM|IL|IT|JM|JP|JE|JO|KZ|KE|KI|KP|KR|KW|KG|LA|LV|LB|LS|LR|LY|LI|LT|LU|MO|MK|MG|MW|MY|MV|ML|MT|MH|MQ|MR|MU|YT|MX|FM|MD|MC|MN|ME|MS|MA|MZ|MM|NA|NR|NP|NL|NC|NZ|NI|NE|NG|NU|NF|MP|NO|OM|PK|PW|PS|PA|PG|PY|PE|PH|PN|PL|PT|PR|QA|RE|RO|RU|RW|BL|SH|KN|LC|MF|PM|VC|WS|SM|ST|SA|SN|RS|SC|SL|SG|SX|SK|SI|SB|SO|ZA|GS|SS|ES|LK|SD|SR|SJ|SZ|SE|CH|SY|TW|TJ|TZ|TH|TL|TG|TK|TO|TT|TN|TR|TM|TC|TV|UG|UA|AE|GB|US|UM|UY|UZ|VU|VE|VN|VG|VI|WF|EH|YE|ZM|ZW{2})([A-Z0-9]{9}))(\d{1})$/
  end

  def valid_checksum?(value)
    digits      = value.split('').map { |i| i.match(/[A-Z]/) ? (i.ord - 55) : i.to_i }
    even_values = digits.values_at(* digits.each_index.select { |i| i.even? })
    odd_values  = digits.values_at(* digits.each_index.select { |i| i.odd? })

    longest, shortest = if even_values.last == value.split('').map(&:to_i)
      [even_values, odd_values]
    else
      [odd_values, even_values]
    end

    longest = longest.map { |i| i * 2 }
    values  = (longest.concat(shortest)).to_s.scan(/./).map(&:to_i)
    sum     = values.inject(&:+)

    (10 - (sum % 10)) % 10
  end

  def valid?(value)
    valid_format?(value) &&
    valid_checksum?(value)
  end

end

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
flash_validators-3.0.12 lib/flash_validators/validators/isin_validator.rb
flash_validators-3.0.11 lib/flash_validators/validators/isin_validator.rb
flash_validators-3.0.10 lib/flash_validators/validators/isin_validator.rb
flash_validators-3.0.9 lib/flash_validators/validators/isin_validator.rb
flash_validators-3.0.8 lib/flash_validators/validators/isin_validator.rb
flash_validators-3.0.7 lib/flash_validators/validators/isin_validator.rb
flash_validators-3.0.6 lib/flash_validators/validators/isin_validator.rb
flash_validators-3.0.5 lib/flash_validators/validators/isin_validator.rb
flash_validators-3.0.4 lib/flash_validators/validators/isin_validator.rb
flash_validators-3.0.3 lib/flash_validators/validators/isin_validator.rb
flash_validators-3.0.2 lib/flash_validators/validators/isin_validator.rb