lib/ffaker/identification_mx.rb



# encoding: utf-8

require 'ffaker/identification_es'

module FFaker
  module IdentificationMX
    # Author Guapolo <github.com/guapolo>
    extend ModuleUtils
    extend self

    CONSONANTS = %w(B C D F G H J K L M N P Q R S T V W X Y Z).freeze
    VOWELS = %w(A E I O U).freeze
    HOMOCLAVE = CONSONANTS + VOWELS + [*'0'..'9']

    # http://es.wikipedia.org/wiki/Registro_Federal_de_Contribuyentes_(M%C3%A9xico)
    # Registro Federal de Contribuyentes (R.F.C.) para persona física
    def rfc_persona_fisica
      consonants_n = CONSONANTS + ['Ñ']
      all_letters = consonants_n + VOWELS
      date = ::Time.at(rand * ::Time.now.to_f).strftime('%y%m%d')
      [
        fetch_sample(consonants_n),
        fetch_sample(VOWELS),
        fetch_sample(all_letters, count: 2).join,
        date,
        fetch_sample(HOMOCLAVE, count: 3).join
      ].join
    end

    # http://es.wikipedia.org/wiki/Registro_Federal_de_Contribuyentes_(M%C3%A9xico)
    # Registro Federal de Contribuyentes (R.F.C.) para persona moral
    def rfc_persona_moral
      consonants_n_amp = CONSONANTS + ['Ñ', '&']
      all_letters = consonants_n_amp + VOWELS
      date = ::Time.at(rand * ::Time.now.to_f).strftime('%y%m%d')
      "#{fetch_sample(all_letters, count: 3).join}#{date}#{fetch_sample(HOMOCLAVE, count: 3).join}"
    end

    # http://es.wikipedia.org/wiki/Registro_Federal_de_Contribuyentes_(M%C3%A9xico)
    # Registro Federal de Contribuyentes (R.F.C.)
    def rfc
      fetch_sample([rfc_persona_moral, rfc_persona_fisica])
    end

    # http://es.wikipedia.org/wiki/Clave_%C3%9Anica_de_Registro_de_Poblaci%C3%B3n
    # Clave Única de Registro de Población
    def curp
      all_letters = CONSONANTS + VOWELS
      hm = %w(H M)
      date = ::Time.at(rand * ::Time.now.to_f).strftime('%y%m%d')
      [
        fetch_sample(CONSONANTS),
        fetch_sample(VOWELS),
        fetch_sample(all_letters, count: 2).join,
        date,
        fetch_sample(hm),
        fetch_sample(ESTADOS_CURP),
        fetch_sample(CONSONANTS, count: 3).join,
        fetch_sample(HOMOCLAVE),
        rand(10)
      ].join
    end
  end
end