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