dni_nie 0.3.7

Sign up to get free protection for your applications and to get access to all the features.
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: []