Sha256: b4ddd953ce96e3eac6ce6a3aab59a6619af8cbea08ec8d30b4159e79adb6f8bf

Contents?: true

Size: 880 Bytes

Versions: 2

Compression:

Stored size: 880 Bytes

Contents

# frozen_string_literal: true

module FFaker
  module Code
    extend ModuleUtils
    extend self

    def npi(legacy: false)
      max = legacy ? 299_999_999 : 999_999_999
      base_npi = rand(100_000_000..max).to_s

      summed_digits = base_npi
        .chars
        .each_with_index
        .map { |n, i| (i.even? ? n.to_i * 2 : n).to_s }
        .join
        .chars
        .inject(0) { |sum, digit| sum + digit.to_i }

      npi_checksum = (10 - (24 + summed_digits) % 10).to_s.chars.last

      base_npi + npi_checksum
    end

    def ean
      ean = rand(100_000_000_000..999_999_999_999).to_s

      sum = 0
      ean.chars.each_with_index { |c, i| sum += c.to_i * (i.odd? ? 3 : 1) }

      nearest_multiple_of_ten = sum.round(-1)
      nearest_multiple_of_ten += 10 if nearest_multiple_of_ten < sum

      "#{ean}#{nearest_multiple_of_ten - sum}"
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
ffaker-2.15.0 lib/ffaker/code.rb
ffaker-2.14.0 lib/ffaker/code.rb