dni_nie 0.3.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (4) hide show
  1. checksums.yaml +7 -0
  2. data/bin/dni_nie +48 -0
  3. data/lib/dni_nie.rb +128 -0
  4. metadata +62 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: bcb769fca00ac38078bec9afead6867de19cbec1
4
+ data.tar.gz: c161b6c478fe997fb7f6159b1837a759a0e5e467
5
+ SHA512:
6
+ metadata.gz: 78fa438c9b6c8c4db364a48a05429e3654be6c599b585af11c0cce22cf889c39cec2e61f7e1d6715a1de938683ceaf47d73f55d05834bad2e9342cde6e027ea6
7
+ data.tar.gz: 3f04cc26ccf4db0571668e8d0a0bd2c87a44d90a59a87885ad89b9ca95492b9026c16a2109af8a530bffb1eba5b55fccf97a894e4abcd9f97b3f88717173ddda
data/bin/dni_nie ADDED
@@ -0,0 +1,48 @@
1
+ #!/usr/bin/env ruby
2
+ # -*- coding: utf-8 -*-
3
+ require 'dni_nie'
4
+
5
+ args = ARGV.dup
6
+
7
+ case args[0]
8
+ when ('letra' || 'control_letter' )
9
+ puts DniNie.letra args[1].dup
10
+ when ('dni' || 'random_dni')
11
+ puts DniNie.random_dni
12
+ when ('nie' || 'random_nie')
13
+ puts DniNie.get_random_nie
14
+ when ('validar' || 'validate')
15
+ puts DniNie.validar args[1].dup
16
+ else
17
+
18
+ if (/es_.*/.match(ENV["LANG"])) # detecta español en consola
19
+ puts <<EOS
20
+ DniNie versión 0.3.3 - Software LGPL-3.0
21
+ Una gema Ruby para la verficación de documentos DNI/NIE
22
+
23
+ Uso:
24
+ dni_nie [parametro[número_documeto]]
25
+
26
+ Parámetros posibles:
27
+ validar [número] - valida números de identificación (DNI/NIE), devuelve true or false
28
+ letra [número] - retorna la letra de control del documento introducido
29
+ dni - retorna una identificación DNI válida aleatoria
30
+ nie - retorna una identificación NIE válida aleatoria
31
+ EOS
32
+ else
33
+ puts <<EOS
34
+
35
+ DniNie 0.3.3 version - LGPL-3.0 software
36
+ A Ruby gem to handle Spanish Identity Documents
37
+
38
+ Usage:
39
+ dni_nie [parameter[document number]]
40
+
41
+ Possible parameters are:
42
+ validate [number] - validates given identification (DNI/NIE) number, returns true or false
43
+ control_letter [number] - returns validation letter for given identification number
44
+ random_dni - returns a random valid DNI number
45
+ random_nie - returns a random valid NIE number
46
+ EOS
47
+ end
48
+ end
data/lib/dni_nie.rb ADDED
@@ -0,0 +1,128 @@
1
+ #!/usr/bin/ruby
2
+ # -*- coding: utf-8 -*-
3
+
4
+ # @title dni_nie module
5
+ # Los DNI's (Documento Nacional de Identidad) se componen de 8 dígitos y una letra de control
6
+ # | DNI's (Document National Identity) are compound of 8 numbers and a control digit
7
+ # Los NIE's de extranjeros residentes en España tienen una letra (X, Y, Z), 7 números y dígito de control.
8
+ # | NIE's (foreigner number id.) are compound of a letter (X, Y, Z) first , then 7 digits and a control letter at the end.
9
+ #Gem name Require statement Main class or module
10
+ #ruby_parser require 'ruby_parser' RubyParser
11
+ # dni_nie require 'dni_nie' DniNie
12
+ # RESTO | MOD 0 1 2 3 4 5 6 7 8 9 10 11
13
+ # LETRA | LETTER T R W A G M Y F P D X B
14
+ # RESTO | MOD 12 13 14 15 16 17 18 19 20 21 22
15
+ # LETRA | LETTER N J Z S Q V H L C K E
16
+ # X → 0 ,Y → 1, Z → 2
17
+ # más información | more info DNI-NIE http://www.interior.gob.es/web/servicios-al-ciudadano/dni/calculo-del-digito-de-control-del-nif-nie (Spanish)
18
+ # @version 0.3.7
19
+ # @author Luis Jacob Mariscal Fernández
20
+
21
+ module DniNie
22
+
23
+ # LETRA contiene los valores de la 1era letra del NIE | contains the NIE value of 1st letter.
24
+ LETRA = {
25
+ 0 => 'X', # keys => values
26
+ 1 => 'Y',
27
+ 2 => 'Z',
28
+ 3 => 'A',
29
+ 4 => 'G',
30
+ 'X' => 0,
31
+ 'Y' => 1,
32
+ 'Z' => 2
33
+ } #puts LETRA[4] #test hash letras
34
+
35
+ # CODIGO contiene la letra asociado al resto del numero | stores the mod code (control letter) of the number.
36
+ CODIGO = 'TRWAGMYFPDXBNJZSQVHLCKE' # contiene la letra asociada a cada resto.
37
+
38
+ # Transforma la entrada a número de identificación formateado | Converts the entry into id specific format.
39
+ #
40
+ # @param transforma [Número|Cadena] a formato útil (sin 0s superflúos ni caracteres innecesarios) | transform [Number|String] to the valid format type (erase extra 0s, not allowed chars)
41
+ # @return [String] the object converted into the expected format.
42
+ # @raise Entrada errónea | Wrong entry
43
+ # si la entrada es mayor de 8 caracteres | if the entry is longer than 8 chars
44
+ protected
45
+ def self.transform(doc) # da formato conveniente a la entrada
46
+ doc = doc.to_s if doc.is_a? Integer
47
+ doc[0] = '1' if (doc[0] == 'y') or ( doc[0] == 'Y')
48
+ doc[0] = '2' if doc[0] == 'Z' or (doc[0] == 'z')
49
+ doc[0] = '' if doc[0] == 'X' or doc[0] == 'x'
50
+ #p doc
51
+ if doc.length > 8
52
+ raise ArgumentError, "Entrada errónea, número de identificación demasiado grande | Wrong identification number, too long"
53
+ end
54
+ doc.gsub!(/\D/, '') # expresión regular, parece que elimina lo que no sea dígitos
55
+ #DONE check if sth included not a digit
56
+ while doc[0] == '0' and (doc.length > 1) # elimina 0s superfluos
57
+ doc[0] = ''
58
+ end
59
+ doc
60
+ end
61
+
62
+
63
+ # Calcula la letra de control para el número de identificación dado | Generate the entry id control letter.
64
+ #
65
+ # @param calcula para entrada [Número|Cadena] la letra de control asociada | yield for [Number|String] the control letter associated.
66
+ # @return [String] letra de control de la entrada | the requested control letter of the entry.
67
+ public
68
+ def self.letra(num) # letra o digito de control del DNI/NIE
69
+ num = transform(num)
70
+ #doc = '0' + doc if doc.size == 6
71
+ #a = 0
72
+ CODIGO[(num.to_i % 23)].to_s
73
+ end
74
+
75
+ # Valida el documento de identificación dado | Validate the entry id document.
76
+ #
77
+ # @param verifica si la entrada [Número|Cadena] es número de documento válido | check if entry [Number|String] is a valid document id.
78
+ # @return [Boolean] indica si válida la entrada | the entry validation return (true/flase).
79
+ def self.validate_doc(ci) # validar documento
80
+ raise ArgumentError, "Entrada errónea, número de identificación debe ser una cadena | Wrong entry, must be a String" unless ci.is_a? String
81
+ dig = ci[-1]
82
+ ci = ci[0..-2]
83
+ ci = transform(ci)
84
+ #p dig
85
+ #p letra(ci)
86
+ #p ci
87
+ letra(ci) == dig.upcase # pone en Mayúsculas
88
+ end
89
+
90
+ # Genera el documento nacional de identidad aleatorio | Creates a random valid Spanish national id document.
91
+ #
92
+ # @param ninguno | none
93
+ # @return [String] DNI aleatorio | random DNI document.
94
+ def self.get_random_dni # genera dni aleatorio
95
+ dni = rand(0..89999999).to_s # límite en 89 millones, no se sabe de mayor a la fecha
96
+ dni += letra(dni)
97
+ dni
98
+ end
99
+ # Genera un número de identificación del extranjero NIE aleaotorio | Creates a random valid Spanish foreigner id document.
100
+ #
101
+ # @param ninguno | none
102
+ # @return [String] NIE aleatorio | random NIE document.
103
+ def self.get_random_nie # genera nie aleatorio
104
+ #nie = LETRA[(rand(0..2))] ++ rand(0..9_999_999).to_s #parece que siempre asigna millones
105
+ nie = LETRA[(rand(0..2))] ++ rand(0..9999999).to_s
106
+ #p nie
107
+ letra = letra(nie.dup)
108
+ nie += letra
109
+ nie
110
+ end
111
+
112
+ class << self # alias de métodos | methods alias
113
+ alias_method :get_control_letter, :letra
114
+ alias_method :control_letter, :get_control_letter
115
+ alias_method :control_digit, :get_control_letter
116
+ alias_method :validate , :validate_doc
117
+ alias_method :validar , :validate
118
+ alias_method :validar_doc , :validate_doc
119
+ alias_method :random_dni, :get_random_dni
120
+ alias_method :random_nie, :get_random_nie
121
+ alias_method :generar_dni, :get_random_dni
122
+ alias_method :new_dni, :get_random_dni
123
+ alias_method :dni, :get_random_dni
124
+ alias_method :new_nie, :get_random_nie
125
+ alias_method :generar_nie, :get_random_nie
126
+ alias_method :nie, :get_random_nie
127
+ end
128
+ end
metadata ADDED
@@ -0,0 +1,62 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: dni_nie
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.3.7
5
+ platform: ruby
6
+ authors:
7
+ - L. Jacob Mariscal Fernández
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-06-01 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: minitest
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '5.3'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '5.3'
27
+ description: Una gema para la verficación de documentos DNI/NIE | A gem to handle
28
+ Spanish Identity Documents
29
+ email: l.jacob.m.f@gmail.com
30
+ executables:
31
+ - dni_nie
32
+ extensions: []
33
+ extra_rdoc_files: []
34
+ files:
35
+ - bin/dni_nie
36
+ - lib/dni_nie.rb
37
+ homepage: http://rubygems.org/gems/dni_nie
38
+ licenses:
39
+ - LGPL-3.0
40
+ metadata: {}
41
+ post_install_message: Gracias por probar la gema dni_nie | Thanks for installing dni_nie
42
+ gem
43
+ rdoc_options: []
44
+ require_paths:
45
+ - lib
46
+ required_ruby_version: !ruby/object:Gem::Requirement
47
+ requirements:
48
+ - - ">="
49
+ - !ruby/object:Gem::Version
50
+ version: '0'
51
+ required_rubygems_version: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ requirements: []
57
+ rubyforge_project:
58
+ rubygems_version: 2.5.2
59
+ signing_key:
60
+ specification_version: 4
61
+ summary: Utilidades para documentos oficiales DNI-NIE | Spanish official Id. tools
62
+ test_files: []