Class: Faker::NationalHealthService

Inherits:
Base
  • Object
show all
Defined in:
lib/faker/default/nhs.rb

Constant Summary

Constants inherited from Base

Base::Letters, Base::Numbers, Base::ULetters

Class Method Summary collapse

Methods inherited from Base

bothify, disable_enforce_available_locales, fetch, fetch_all, flexible, letterify, method_missing, numerify, parse, rand, rand_in_range, regexify, resolve, respond_to_missing?, sample, shuffle, translate, unique, with_locale

Class Method Details

.british_numberObject


6
7
8
9
10
11
12
13
14
15
16
# File 'lib/faker/default/nhs.rb', line 6

def british_number
  base_number = rand(400_000_001...499_999_999)
  # If the check digit is equivalent to 10, the number is invalid.
  # See https://en.wikipedia.org/wiki/NHS_number
  base_number -= 1 if check_digit(base_number) == 10
  "#{base_number}#{check_digit(base_number)}".to_s
                                             .chars
                                             .insert(3, ' ')
                                             .insert(7, ' ')
                                             .join('')
end

.check_digit(number = 0) ⇒ Object


18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/faker/default/nhs.rb', line 18

def check_digit(number = 0)
  sum = 0
  number.to_s.chars.each_with_index do |digit, idx|
    position = idx + 1
    sum += (digit.to_i * (11 - position))
  end
  result = 11 - (sum % 11)

  # A value of 11 is considered the same as 0
  # See https://en.wikipedia.org/wiki/NHS_number
  return 0 if result == 11

  result
end