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.
- checksums.yaml +7 -0
- data/bin/dni_nie +48 -0
- data/lib/dni_nie.rb +128 -0
- 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: []
|