Versión Copiada del tfs
This commit is contained in:
839
Utilidades.vb
Normal file
839
Utilidades.vb
Normal file
@@ -0,0 +1,839 @@
|
||||
Imports System.IO
|
||||
Imports System.Xml
|
||||
Imports System.Xml.Serialization
|
||||
Imports System.Text.RegularExpressions
|
||||
Imports System.Text
|
||||
Imports System.Net
|
||||
Imports System.Net.Security
|
||||
Imports System.Security.Cryptography.X509Certificates
|
||||
Imports System.Data
|
||||
|
||||
Public Enum FormatoFechasEnum As Integer
|
||||
FECHA_HORA = 0
|
||||
FECHA_SEPARADO_POR_BARRAS = 1
|
||||
FECHA_ESPACIADO_GRANDE = 2
|
||||
FECHA_ESPACIADO_PEQUEÑO = 3
|
||||
End Enum
|
||||
Public Class Utilidades
|
||||
Public Shared Function CodificarBase64(texto As String) As String
|
||||
Dim stringbytes As Byte() = System.Text.ASCIIEncoding.ASCII.GetBytes(texto)
|
||||
Return System.Convert.ToBase64String(stringbytes).TrimEnd("=").Replace("+", "-").Replace("/", "_")
|
||||
End Function
|
||||
Public Shared Function DecodificarBase64(texto As String) As String
|
||||
Dim bytes As Byte() = Convert.FromBase64String(texto)
|
||||
Return Encoding.ASCII.GetString(bytes)
|
||||
End Function
|
||||
Public Shared Sub EliminaDirectorioTemporal(Subdirectorio As String)
|
||||
Dim sDir As String = System.IO.Path.GetTempPath & "\" & Subdirectorio & "\"
|
||||
If IO.Directory.Exists(sDir) Then
|
||||
Try
|
||||
IO.Directory.Delete(sDir, True)
|
||||
Catch ex As Exception
|
||||
End Try
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Public Shared Function ObtieneMensajeExcepcionCompleto(ex As Exception) As String
|
||||
Dim sMensaje As String = "Tipo excepción: " & ex.ToString & vbCrLf
|
||||
Dim exError As Exception = ex
|
||||
Do
|
||||
sMensaje &= exError.StackTrace & vbCrLf
|
||||
exError = exError.InnerException
|
||||
Loop Until IsNothing(exError)
|
||||
Return sMensaje
|
||||
End Function
|
||||
Public Shared Function IntervalosFechasCoincidentes(FechaInicio1 As DateTime, FechaFin1 As DateTime, FechaInicio2 As DateTime, FechaFin2 As DateTime) As Boolean
|
||||
Return (FechaInicio1 <= FechaInicio2 And FechaInicio2 < FechaFin1) OrElse (FechaInicio2 <= FechaInicio1 And FechaFin2 > FechaInicio1)
|
||||
End Function
|
||||
Public Shared Function IntervalosFechasCoincidentes(FechaInicio1 As DateOnly, FechaFin1 As DateOnly, FechaInicio2 As DateOnly, FechaFin2 As DateOnly) As Boolean
|
||||
Return (FechaInicio1 <= FechaInicio2 And FechaInicio2 < FechaFin1) OrElse (FechaInicio2 <= FechaInicio1 And FechaFin2 > FechaInicio1)
|
||||
End Function
|
||||
|
||||
Public Shared Sub CreaEstructuraDirectorio(ByVal Ruta As String)
|
||||
Dim sDirectorios() As String = Ruta.Split("\")
|
||||
Dim sDirectorio As String = ""
|
||||
Dim i As Integer
|
||||
For i = 0 To sDirectorios.Length - 1
|
||||
Try
|
||||
sDirectorio &= sDirectorios(i) & "\"
|
||||
If Not IO.Directory.Exists(sDirectorio) Then IO.Directory.CreateDirectory(sDirectorio)
|
||||
Catch ex As Exception
|
||||
End Try
|
||||
Next
|
||||
End Sub
|
||||
Public Shared Function DeserializarSinErrores(ByVal cadena As String, ByVal tipo As System.Type) As Object
|
||||
Return deserializar(cadena, tipo, True)
|
||||
End Function
|
||||
Public Shared Function deserializar(ByVal cadena As String, ByVal tipo As System.Type, Optional SinErrores As Boolean = True) As Object
|
||||
Dim xs As New System.Xml.Serialization.XmlSerializer(tipo)
|
||||
If SinErrores Then
|
||||
AddHandler xs.UnknownElement, AddressOf ElementoDesconocido
|
||||
AddHandler xs.UnknownNode, AddressOf NodoDesconocido
|
||||
AddHandler xs.UnknownAttribute, AddressOf AtributoDesconocido
|
||||
AddHandler xs.UnreferencedObject, AddressOf ObjetoNoReferenciado
|
||||
End If
|
||||
Dim sr As New StringReader(cadena)
|
||||
Dim xr As New System.Xml.XmlTextReader(sr)
|
||||
Dim obj As Object = xs.Deserialize(xr)
|
||||
xr.Close()
|
||||
sr.Close()
|
||||
Return obj
|
||||
End Function
|
||||
Private Shared Sub ObjetoNoReferenciado(sender As Object, e As UnreferencedObjectEventArgs)
|
||||
|
||||
End Sub
|
||||
|
||||
Private Shared Sub AtributoDesconocido(sender As Object, e As XmlAttributeEventArgs)
|
||||
|
||||
End Sub
|
||||
|
||||
Private Shared Sub NodoDesconocido(sender As Object, e As XmlNodeEventArgs)
|
||||
|
||||
End Sub
|
||||
|
||||
Private Shared Sub ElementoDesconocido(sender As Object, e As XmlElementEventArgs)
|
||||
|
||||
End Sub
|
||||
|
||||
Public Shared Function Deserializa(ByVal BA As Byte(), ByVal tipo As System.Type) As Object
|
||||
Dim xs As New System.Xml.Serialization.XmlSerializer(tipo)
|
||||
'Dim fs As New FileStream(Fichero, FileMode.Open, FileAccess.Read)
|
||||
Dim ms As New MemoryStream(BA)
|
||||
Dim obj As Object = xs.Deserialize(ms)
|
||||
'.Close()
|
||||
Return obj
|
||||
End Function
|
||||
|
||||
Public Shared Function DeserializaFichero(ByVal Fichero As String, ByVal tipo As System.Type) As Object
|
||||
Dim xs As New System.Xml.Serialization.XmlSerializer(tipo)
|
||||
Dim fs As New FileStream(Fichero, FileMode.Open, FileAccess.Read)
|
||||
Dim obj As Object = xs.Deserialize(fs)
|
||||
fs.Close()
|
||||
Return obj
|
||||
End Function
|
||||
Public Shared Function serializar(ByVal obj As Object) As String
|
||||
Dim se As New System.Xml.Serialization.XmlSerializer(obj.GetType)
|
||||
Dim sw As New StringWriter
|
||||
se.Serialize(sw, obj)
|
||||
Return sw.ToString
|
||||
End Function
|
||||
Public Shared Sub serializar(ByVal obj As Object, FicheroDestino As String)
|
||||
Dim se As New System.Xml.Serialization.XmlSerializer(obj.GetType)
|
||||
If IO.File.Exists(FicheroDestino) Then IO.File.Delete(FicheroDestino)
|
||||
Dim fs As New IO.FileStream(FicheroDestino, FileMode.CreateNew)
|
||||
se.Serialize(fs, obj)
|
||||
fs.Close()
|
||||
End Sub
|
||||
|
||||
Public Shared Function serializarsindeclaracion(ByVal obj As Object) As String
|
||||
Dim ms As New MemoryStream
|
||||
Dim settings As New XmlWriterSettings
|
||||
Dim utf8 As New System.Text.UTF8Encoding
|
||||
settings.OmitXmlDeclaration = True
|
||||
settings.Indent = True
|
||||
settings.Encoding = utf8
|
||||
Dim xw As XmlWriter = XmlWriter.Create(ms, settings)
|
||||
Dim ns As New XmlSerializerNamespaces()
|
||||
ns.Add("", "")
|
||||
Dim se As New System.Xml.Serialization.XmlSerializer(obj.GetType)
|
||||
se.Serialize(xw, obj, ns)
|
||||
Return utf8.GetString(ms.ToArray)
|
||||
End Function
|
||||
Public Shared Sub ByteArrayAFichero(Datos() As Byte, NombreFichero As String, Optional Sobreescribir As Boolean = False)
|
||||
If Not IO.Directory.Exists(IO.Path.GetDirectoryName(NombreFichero)) Then CreaEstructuraDirectorio(IO.Path.GetDirectoryName(NombreFichero))
|
||||
If IO.File.Exists(NombreFichero) And Sobreescribir Then IO.File.Delete(NombreFichero)
|
||||
Dim oFileStream As System.IO.FileStream
|
||||
oFileStream = New System.IO.FileStream(NombreFichero, System.IO.FileMode.Create)
|
||||
oFileStream.Write(Datos, 0, Datos.Length)
|
||||
oFileStream.Close()
|
||||
End Sub
|
||||
Public Shared Function deserializar(ByVal cadena As String, ByVal tipo As System.Type) As Object
|
||||
Dim xs As New System.Xml.Serialization.XmlSerializer(tipo)
|
||||
Dim sr As New StringReader(cadena)
|
||||
Dim xr As New System.Xml.XmlTextReader(sr)
|
||||
Dim obj As Object = xs.Deserialize(xr)
|
||||
xr.Close()
|
||||
sr.Close()
|
||||
Return obj
|
||||
End Function
|
||||
|
||||
Public Shared Function ObtieneFicheroNoExistente(DirectorioInicial As String, Nombre As String, ByVal Extension As String) As String
|
||||
If Not IO.Directory.Exists(DirectorioInicial) Then IO.Directory.CreateDirectory(DirectorioInicial)
|
||||
Dim sFichero As String = DirectorioInicial & Nombre & "." & Extension
|
||||
Dim i As Integer = 0
|
||||
Do While IO.File.Exists(sFichero)
|
||||
i += 1
|
||||
sFichero = DirectorioInicial & Nombre & "_" & i.ToString & "." & Extension
|
||||
Loop
|
||||
Return sFichero
|
||||
End Function
|
||||
Public Shared Function ObtieneFicheroAleatorio(DirectorioInicial As String, ByVal Extension As String) As String
|
||||
If Not IO.Directory.Exists(DirectorioInicial) Then IO.Directory.CreateDirectory(DirectorioInicial)
|
||||
Dim sFichero As String = DirectorioInicial & System.IO.Path.GetRandomFileName & "." & Extension
|
||||
Do While IO.File.Exists(sFichero)
|
||||
'Try
|
||||
' IO.File.Delete(sFichero)
|
||||
'Catch ex As Exception
|
||||
sFichero = DirectorioInicial & System.IO.Path.GetRandomFileName & "." & Extension
|
||||
' End Try
|
||||
Loop
|
||||
Return sFichero
|
||||
End Function
|
||||
Public Shared Function ObtieneFicheroAleatorio(ByVal Extension As String) As String
|
||||
Dim sFichero As String = System.IO.Path.GetTempPath & System.IO.Path.GetRandomFileName & "." & Extension
|
||||
Do While IO.File.Exists(sFichero)
|
||||
'Try
|
||||
' IO.File.Delete(sFichero)
|
||||
'Catch ex As Exception
|
||||
sFichero = System.IO.Path.GetTempPath & "\" & System.IO.Path.GetRandomFileName & "." & Extension
|
||||
' End Try
|
||||
Loop
|
||||
Return sFichero
|
||||
End Function
|
||||
Public Shared Function ObtieneDirectorioAleatorio() As String
|
||||
Dim sDir As String = System.IO.Path.GetTempPath & System.IO.Path.GetRandomFileName
|
||||
Do While IO.Directory.Exists(sDir)
|
||||
sDir = System.IO.Path.GetTempPath & "\" & System.IO.Path.GetRandomFileName
|
||||
Loop
|
||||
IO.Directory.CreateDirectory(sDir)
|
||||
Return sDir
|
||||
End Function
|
||||
Public Shared Function ObtieneDirectorioAleatorio(Subdirectorio As String) As String
|
||||
If Not IO.Directory.Exists(System.IO.Path.GetTempPath & "\" & Subdirectorio & "\") Then IO.Directory.CreateDirectory(System.IO.Path.GetTempPath & "\" & Subdirectorio & "\")
|
||||
Dim sDir As String = System.IO.Path.GetTempPath & "\" & Subdirectorio & "\" & System.IO.Path.GetRandomFileName
|
||||
Do While IO.Directory.Exists(sDir) Or IO.File.Exists(sDir)
|
||||
sDir = System.IO.Path.GetTempPath & "\" & System.IO.Path.GetRandomFileName
|
||||
Loop
|
||||
IO.Directory.CreateDirectory(sDir)
|
||||
Return sDir
|
||||
End Function
|
||||
|
||||
|
||||
Public Shared Function ObtieneNumeroFicheros(ByVal Directory As String) As Integer
|
||||
Dim FileCount As Integer = 0
|
||||
Dim SubDirectory() As String
|
||||
Dim i As Integer
|
||||
FileCount = System.IO.Directory.GetFiles(Directory).Length
|
||||
SubDirectory = System.IO.Directory.GetDirectories(Directory)
|
||||
For i = 0 To SubDirectory.Length - 1
|
||||
FileCount = ObtieneNumeroFicheros(SubDirectory(i)) + FileCount
|
||||
Next
|
||||
Return FileCount
|
||||
End Function
|
||||
Public Shared Sub ObtieneFicherosRecursivo(ByVal Ruta As String, ByRef Ficheros() As String)
|
||||
Dim sFicheros() As String = IO.Directory.GetFiles(Ruta)
|
||||
Dim iNumeroFicheros As Integer
|
||||
If Not IsNothing(Ficheros) Then iNumeroFicheros = Ficheros.Length
|
||||
ReDim Preserve Ficheros(sFicheros.Length - 1 + iNumeroFicheros)
|
||||
sFicheros.CopyTo(Ficheros, iNumeroFicheros)
|
||||
Dim sDirectorio, sDirectorios() As String
|
||||
sDirectorios = IO.Directory.GetDirectories(Ruta)
|
||||
For Each sDirectorio In sDirectorios
|
||||
ObtieneFicherosRecursivo(sDirectorio, Ficheros)
|
||||
Next
|
||||
End Sub
|
||||
Public Shared Function FechaEnCastellano(ByVal Fecha As Date, ByVal Formato As FormatoFechasEnum) As String
|
||||
Dim sMeses(11) As String
|
||||
sMeses(0) = "Enero"
|
||||
sMeses(1) = "Febrero"
|
||||
sMeses(2) = "Marzo"
|
||||
sMeses(3) = "Abril"
|
||||
sMeses(4) = "Mayo"
|
||||
sMeses(5) = "Junio"
|
||||
sMeses(6) = "Julio"
|
||||
sMeses(7) = "Agosto"
|
||||
sMeses(8) = "Septiembre"
|
||||
sMeses(9) = "Octubre"
|
||||
sMeses(10) = "Noviembre"
|
||||
sMeses(11) = "Diciembre"
|
||||
Dim sDia As String, sMes As String, sAño As String
|
||||
sDia = Fecha.Day.ToString
|
||||
sMes = sMeses(Fecha.Month - 1)
|
||||
sAño = Fecha.Year
|
||||
Select Case Formato
|
||||
Case FormatoFechasEnum.FECHA_ESPACIADO_GRANDE
|
||||
FechaEnCastellano = sDia & " de " & sMes & " de " & sAño
|
||||
Case FormatoFechasEnum.FECHA_HORA
|
||||
FechaEnCastellano = Fecha.Day.ToString.PadLeft(2, "0") & "/" & Fecha.Month.ToString.PadLeft(2, "0") & "/" & Fecha.Year.ToString & " " & Fecha.Hour.ToString.PadLeft(2, "0") & ":" & Fecha.Minute.ToString.PadLeft(2, "0") & ":" & Fecha.Second.ToString.PadLeft(2, "0")
|
||||
Case FormatoFechasEnum.FECHA_ESPACIADO_PEQUEÑO
|
||||
FechaEnCastellano = sDia & " de " & sMes & " de " & sAño
|
||||
Case FormatoFechasEnum.FECHA_SEPARADO_POR_BARRAS
|
||||
FechaEnCastellano = Fecha.Day.ToString.PadLeft(2, "0") & "/" & Fecha.Month.ToString.PadLeft(2, "0") & "/" & Fecha.Year.ToString
|
||||
Case Else
|
||||
Throw New Exception("Formato no reconocido")
|
||||
End Select
|
||||
End Function
|
||||
Public Shared Function MesCastellano(Mes As Integer) As String
|
||||
Dim sMeses(11) As String
|
||||
sMeses(0) = "Enero"
|
||||
sMeses(1) = "Febrero"
|
||||
sMeses(2) = "Marzo"
|
||||
sMeses(3) = "Abril"
|
||||
sMeses(4) = "Mayo"
|
||||
sMeses(5) = "Junio"
|
||||
sMeses(6) = "Julio"
|
||||
sMeses(7) = "Agosto"
|
||||
sMeses(8) = "Septiembre"
|
||||
sMeses(9) = "Octubre"
|
||||
sMeses(10) = "Noviembre"
|
||||
sMeses(11) = "Diciembre"
|
||||
Return sMeses(Mes - 1)
|
||||
End Function
|
||||
|
||||
Public Shared Function ObtenerRutaDelEnsamblado() As String
|
||||
Return IO.Path.GetDirectoryName(IO.Path.GetFullPath(New System.Uri(System.Reflection.Assembly.GetExecutingAssembly().CodeBase).AbsolutePath))
|
||||
End Function
|
||||
Public Class Mes
|
||||
Property NumeroMes As Integer
|
||||
Property Mes As String
|
||||
End Class
|
||||
Public Shared Function Meses() As List(Of Mes)
|
||||
Dim listadoMeses As New List(Of Mes)
|
||||
Dim m As Mes
|
||||
m = New Mes
|
||||
m.NumeroMes = 1
|
||||
m.Mes = "Enero"
|
||||
listadoMeses.Add(m)
|
||||
|
||||
m = New Mes
|
||||
m.NumeroMes = 2
|
||||
m.Mes = "Febrero"
|
||||
listadoMeses.Add(m)
|
||||
|
||||
m = New Mes
|
||||
m.NumeroMes = 3
|
||||
m.Mes = "Marzo"
|
||||
listadoMeses.Add(m)
|
||||
|
||||
m = New Mes
|
||||
m.NumeroMes = 4
|
||||
m.Mes = "Abril"
|
||||
listadoMeses.Add(m)
|
||||
|
||||
m = New Mes
|
||||
m.NumeroMes = 5
|
||||
m.Mes = "Mayo"
|
||||
listadoMeses.Add(m)
|
||||
|
||||
m = New Mes
|
||||
m.NumeroMes = 6
|
||||
m.Mes = "Junio"
|
||||
listadoMeses.Add(m)
|
||||
|
||||
m = New Mes
|
||||
m.NumeroMes = 7
|
||||
m.Mes = "Julio"
|
||||
listadoMeses.Add(m)
|
||||
|
||||
m = New Mes
|
||||
m.NumeroMes = 8
|
||||
m.Mes = "Agosto"
|
||||
listadoMeses.Add(m)
|
||||
|
||||
m = New Mes
|
||||
m.NumeroMes = 9
|
||||
m.Mes = "Septiembre"
|
||||
listadoMeses.Add(m)
|
||||
|
||||
m = New Mes
|
||||
m.NumeroMes = 10
|
||||
m.Mes = "Octubre"
|
||||
listadoMeses.Add(m)
|
||||
|
||||
m = New Mes
|
||||
m.NumeroMes = 11
|
||||
m.Mes = "Noviembre"
|
||||
listadoMeses.Add(m)
|
||||
|
||||
m = New Mes
|
||||
m.NumeroMes = 12
|
||||
m.Mes = "Diciembre"
|
||||
listadoMeses.Add(m)
|
||||
Return listadoMeses
|
||||
End Function
|
||||
|
||||
Public Shared Function CalculoLetraCif(ByVal DNI As String) As String
|
||||
' Dim sResultado As String = "", iTamanoDNI As Integer, sLetrasNif As String, i As Integer, Cdd0 As Integer, V1 As String = ""
|
||||
Dim sResultado As String = "", iTamanoDNI As Integer, sLetrasNif As String, i As Integer, V1 As String = ""
|
||||
sLetrasNif = "TRWAGMYFPDXBNJZSQVHLCKE"
|
||||
iTamanoDNI = Len(DNI)
|
||||
If iTamanoDNI = 0 Or iTamanoDNI > 10 Then Return DNI
|
||||
DNI = DNI.ToUpper
|
||||
For i = 1 To iTamanoDNI
|
||||
If Asc(Mid(DNI, i, 1)) >= 48 And Asc(Mid(DNI, i, 1)) <= 57 Or Asc(Mid(DNI, i, 1)) >= 65 And Asc(Mid(DNI, i, 1)) <= 90 Then sResultado = sResultado & Mid(DNI, i, 1)
|
||||
Next i
|
||||
iTamanoDNI = Len(sResultado)
|
||||
If iTamanoDNI = 0 Then
|
||||
Return sResultado
|
||||
End If
|
||||
If Asc(Mid(sResultado, 1, 1)) < 48 Or Asc(Mid(sResultado, 1, 1)) > 57 Or Asc(Mid(sResultado, iTamanoDNI, 1)) < 48 Or Asc(Mid(sResultado, iTamanoDNI, 1)) > 57 Then
|
||||
Return sResultado
|
||||
End If
|
||||
' Cdd0 = 0
|
||||
For i = 1 To iTamanoDNI
|
||||
' If Cdd0 Or (Asc(Mid(sResultado, i, 1)) <> 48) Then
|
||||
If Asc(Mid(sResultado, i, 1)) >= 48 And Asc(Mid(sResultado, i, 1)) <= 57 Then V1 = V1 & Mid(sResultado, i, 1)
|
||||
' Cdd0 = 1
|
||||
' End If
|
||||
Next i
|
||||
If Trim(V1) = "" Then Return V1
|
||||
If V1.Length < 9 Then V1 = V1.PadLeft(8, "0")
|
||||
Return V1 & Mid(sLetrasNif, Val(V1) Mod 23 + 1, 1)
|
||||
End Function
|
||||
Public Shared Function ValidateNif(ByRef nif As String) As Boolean
|
||||
|
||||
'*******************************************************************
|
||||
' Nombre: ValidateNif
|
||||
' por Enrique Martínez Montejo
|
||||
'
|
||||
' Finalidad: Validar el NIF/NIE pasado a la función.
|
||||
'
|
||||
' Entradas:
|
||||
' NIF: String. El NIF/NIE que se desea verificar. El número
|
||||
' será devuelto formateado y con el NIF/NIE correcto.
|
||||
' Resultados:
|
||||
' Boolean: True/False
|
||||
'
|
||||
'*******************************************************************
|
||||
nif = nif.Trim()
|
||||
Dim nifTemp As String = nif.Trim().ToUpper()
|
||||
|
||||
If (nifTemp.Length > 9) Then Return False
|
||||
|
||||
' Guardamos el dígito de control.
|
||||
Dim dcTemp As Char = nifTemp.Chars(nif.Length - 1)
|
||||
|
||||
' Compruebo si el dígito de control es un número.
|
||||
If (Char.IsDigit(dcTemp)) Then Return Nothing
|
||||
|
||||
' Nos quedamos con los caracteres, sin el dígito de control.
|
||||
nifTemp = nifTemp.Substring(0, nif.Length - 1)
|
||||
|
||||
If (nifTemp.Length < 8) Then
|
||||
Dim paddingChar As String = New String("0"c, 8 - nifTemp.Length)
|
||||
nifTemp = nifTemp.Insert(nifTemp.Length, paddingChar)
|
||||
End If
|
||||
|
||||
' Obtengo el dígito de control correspondiente, utilizando
|
||||
' para ello una llamada a la función GetDcNif.
|
||||
'
|
||||
Dim dc As Char = GetDcNif(nif)
|
||||
|
||||
If (Not (dc = Nothing)) Then
|
||||
nif = nifTemp & dc
|
||||
End If
|
||||
|
||||
Return (dc = dcTemp)
|
||||
|
||||
End Function
|
||||
Public Shared Function GetDcNif(ByVal nif As String) As Char
|
||||
|
||||
'*******************************************************************
|
||||
' Nombre: GetDcNif
|
||||
' por Enrique Martínez Montejo
|
||||
'
|
||||
' Finalidad: Devuelve la letra correspondiente al NIF o al NIE
|
||||
' (Número de Identificación de Extranjero)
|
||||
'
|
||||
' Entradas:
|
||||
' NIF: String. La cadena del NIF cuya letra final se desea
|
||||
' obtener.
|
||||
'
|
||||
' Resultados:
|
||||
' String: La letra del NIF/NIE.
|
||||
'
|
||||
'*******************************************************************
|
||||
|
||||
' Pasamos el NIF a mayúscula a la vez que eliminamos los
|
||||
' espacios en blanco al comienzo y al final de la cadena.
|
||||
'
|
||||
nif = nif.Trim().ToUpper()
|
||||
|
||||
' El NIF está formado de uno a nueve números seguido de una letra.
|
||||
'
|
||||
' El NIF de otros colectivos de personas físicas, está
|
||||
' formato por una letra (K, L, M), seguido de 7 números
|
||||
' y de una letra final.
|
||||
'
|
||||
' El NIE está formado de una letra inicial (X, Y, Z),
|
||||
' seguido de 7 números y de una letra final.
|
||||
'
|
||||
' En el patrón de la expresión regular, defino cuatro grupos en el
|
||||
' siguiente orden:
|
||||
'
|
||||
' 1º) 1 a 8 dígitos.
|
||||
' 2º) 1 a 8 dígitos + 1 letra.
|
||||
' 3º) 1 letra + 1 a 7 dígitos.
|
||||
' 4º) 1 letra + 1 a 7 dígitos + 1 letra.
|
||||
'
|
||||
Try
|
||||
Dim re As New Regex(
|
||||
"(^\d{1,8}$)|(^\d{1,8}[A-Z]$)|(^[K-MX-Z]\d{1,7}$)|(^[K-MX-Z]\d{1,7}[A-Z]$)",
|
||||
RegexOptions.IgnoreCase)
|
||||
|
||||
If (Not (re.IsMatch(nif))) Then Return Nothing
|
||||
|
||||
' Nos quedamos únicamente con los números del NIF, y
|
||||
' los formateamos con ceros a la izquierda si su
|
||||
' longitud es inferior a siete caracteres.
|
||||
'
|
||||
re = New Regex("(\d{1,8})")
|
||||
|
||||
Dim numeros As String = re.Match(nif).Value.PadLeft(7, "0"c)
|
||||
|
||||
' Primer carácter del NIF.
|
||||
'
|
||||
Dim firstChar As Char = nif.Chars(0)
|
||||
|
||||
' Si procede, reemplazamos la letra del NIE por el peso que le corresponde.
|
||||
'
|
||||
If (firstChar = "X"c) Then
|
||||
numeros = "0" & numeros
|
||||
|
||||
ElseIf (firstChar = "Y"c) Then
|
||||
numeros = "1" & numeros
|
||||
|
||||
ElseIf (firstChar = "Z"c) Then
|
||||
numeros = "2" & numeros
|
||||
|
||||
End If
|
||||
|
||||
' Tabla del NIF
|
||||
'
|
||||
' 0T 1R 2W 3A 4G 5M 6Y 7F 8P 9D
|
||||
' 10X 11B 12N 13J 14Z 15S 16Q 17V 18H 19L
|
||||
' 20C 21K 22E 23T
|
||||
'
|
||||
' Procedo a calcular el NIF/NIE
|
||||
'
|
||||
Dim dni As Integer = CInt(numeros)
|
||||
|
||||
' La operación consiste en calcular el resto de dividir el DNI
|
||||
' entre 23 (sin decimales). Dicho resto (que estará entre 0 y 22),
|
||||
' se busca en la tabla y nos da la letra del NIF.
|
||||
'
|
||||
' Obtenemos el resto de la división.
|
||||
'
|
||||
Dim r As Integer = dni Mod 23
|
||||
|
||||
' Obtenemos el dígito de control del NIF
|
||||
'
|
||||
Dim dc As Char = CChar("TRWAGMYFPDXBNJZSQVHLCKE".Substring(r, 1))
|
||||
|
||||
Return dc
|
||||
|
||||
Catch
|
||||
' Cualquier excepción producida, devolverá el valor Nothing.
|
||||
'
|
||||
Return Nothing
|
||||
|
||||
End Try
|
||||
|
||||
End Function
|
||||
Public Shared Function RecalculaNIF(ByVal nif As String) As Char
|
||||
|
||||
'*******************************************************************
|
||||
' Nombre: GetDcNif
|
||||
' por Enrique Martínez Montejo
|
||||
'
|
||||
' Finalidad: Devuelve la letra correspondiente al NIF o al NIE
|
||||
' (Número de Identificación de Extranjero)
|
||||
'
|
||||
' Entradas:
|
||||
' NIF: String. La cadena del NIF cuya letra final se desea
|
||||
' obtener.
|
||||
'
|
||||
' Resultados:
|
||||
' String: La letra del NIF/NIE.
|
||||
'
|
||||
'*******************************************************************
|
||||
|
||||
' Pasamos el NIF a mayúscula a la vez que eliminamos los
|
||||
' espacios en blanco al comienzo y al final de la cadena.
|
||||
'
|
||||
nif = nif.Trim().ToUpper()
|
||||
|
||||
' El NIF está formado de uno a nueve números seguido de una letra.
|
||||
'
|
||||
' El NIF de otros colectivos de personas físicas, está
|
||||
' formato por una letra (K, L, M), seguido de 7 números
|
||||
' y de una letra final.
|
||||
'
|
||||
' El NIE está formado de una letra inicial (X, Y, Z),
|
||||
' seguido de 7 números y de una letra final.
|
||||
'
|
||||
' En el patrón de la expresión regular, defino cuatro grupos en el
|
||||
' siguiente orden:
|
||||
'
|
||||
' 1º) 1 a 8 dígitos.
|
||||
' 2º) 1 a 8 dígitos + 1 letra.
|
||||
' 3º) 1 letra + 1 a 7 dígitos.
|
||||
' 4º) 1 letra + 1 a 7 dígitos + 1 letra.
|
||||
'
|
||||
Try
|
||||
Dim re As New Regex(
|
||||
"(^\d{1,8}$)|(^\d{1,8}[A-Z]$)|(^[K-MX-Z]\d{1,7}$)|(^[K-MX-Z]\d{1,7}[A-Z]$)",
|
||||
RegexOptions.IgnoreCase)
|
||||
|
||||
If (Not (re.IsMatch(nif))) Then Return Nothing
|
||||
|
||||
' Nos quedamos únicamente con los números del NIF, y
|
||||
' los formateamos con ceros a la izquierda si su
|
||||
' longitud es inferior a siete caracteres.
|
||||
'
|
||||
re = New Regex("(\d{1,8})")
|
||||
|
||||
Dim numeros As String = re.Match(nif).Value.PadLeft(7, "0"c)
|
||||
|
||||
' Primer carácter del NIF.
|
||||
'
|
||||
Dim firstChar As Char = nif.Chars(0)
|
||||
|
||||
' Si procede, reemplazamos la letra del NIE por el peso que le corresponde.
|
||||
'
|
||||
If (firstChar = "X"c) Then
|
||||
numeros = "0" & numeros
|
||||
|
||||
ElseIf (firstChar = "Y"c) Then
|
||||
numeros = "1" & numeros
|
||||
|
||||
ElseIf (firstChar = "Z"c) Then
|
||||
numeros = "2" & numeros
|
||||
|
||||
End If
|
||||
|
||||
' Tabla del NIF
|
||||
'
|
||||
' 0T 1R 2W 3A 4G 5M 6Y 7F 8P 9D
|
||||
' 10X 11B 12N 13J 14Z 15S 16Q 17V 18H 19L
|
||||
' 20C 21K 22E 23T
|
||||
'
|
||||
' Procedo a calcular el NIF/NIE
|
||||
'
|
||||
Dim dni As Integer = CInt(numeros)
|
||||
|
||||
' La operación consiste en calcular el resto de dividir el DNI
|
||||
' entre 23 (sin decimales). Dicho resto (que estará entre 0 y 22),
|
||||
' se busca en la tabla y nos da la letra del NIF.
|
||||
'
|
||||
' Obtenemos el resto de la división.
|
||||
'
|
||||
Dim r As Integer = dni Mod 23
|
||||
|
||||
' Obtenemos el dígito de control del NIF
|
||||
'
|
||||
Dim dc As Char = CChar("TRWAGMYFPDXBNJZSQVHLCKE".Substring(r, 1))
|
||||
|
||||
Dim NifCorregido As String = numeros & dc
|
||||
Return NifCorregido
|
||||
|
||||
Catch
|
||||
' Cualquier excepción producida, devolverá el valor Nothing.
|
||||
'
|
||||
Return Nothing
|
||||
|
||||
End Try
|
||||
|
||||
End Function
|
||||
Public Shared Function ConvertirTiempoUnixADateTime(ByVal tiempoUnix As Long)
|
||||
Dim fecha As New DateTime(1970, 1, 1, 0, 0, 0, 0, System.DateTimeKind.Utc)
|
||||
System.Diagnostics.Debug.WriteLine(fecha.AddSeconds(tiempoUnix).ToLocalTime.ToString)
|
||||
System.Diagnostics.Debug.WriteLine(fecha.AddSeconds(tiempoUnix).ToLocalTime.ToUniversalTime)
|
||||
Return fecha.AddSeconds(tiempoUnix).ToUniversalTime
|
||||
End Function
|
||||
Public Shared Function UpCast(Of B, S As {New, B})(ByVal baseObj As B) As S
|
||||
Dim superObj As S = New S()
|
||||
Dim superProp As System.Reflection.PropertyInfo = Nothing
|
||||
|
||||
For Each baseProp As System.Reflection.PropertyInfo In baseObj.GetType().GetProperties()
|
||||
superProp = superObj.GetType().GetProperty(baseProp.Name)
|
||||
superProp.SetValue(superObj, baseProp.GetValue(baseObj, Nothing), Nothing)
|
||||
Next
|
||||
|
||||
Return superObj
|
||||
End Function
|
||||
Public Shared Function StringToHex(ByVal text As String) As String
|
||||
Dim shex As String = ""
|
||||
For i As Integer = 0 To text.Length - 1
|
||||
shex &= Asc(text.Substring(i, 1)).ToString("x").ToUpper
|
||||
Next
|
||||
Return shex
|
||||
End Function
|
||||
Public Shared Function HexToString(ByVal hex As String) As String
|
||||
Dim text As New System.Text.StringBuilder(hex.Length \ 2)
|
||||
For i As Integer = 0 To hex.Length - 2 Step 2
|
||||
text.Append(Chr(Convert.ToByte(hex.Substring(i, 2), 16)))
|
||||
Next
|
||||
Return text.ToString
|
||||
End Function
|
||||
Public Shared Function HexToArray(ByVal hex As String) As Byte()
|
||||
Dim raw As Byte() = New Byte((hex.Length / 2) - 1) {}
|
||||
Dim i As Integer
|
||||
For i = 0 To raw.Length - 1
|
||||
raw(i) = Convert.ToByte(hex.Substring((i * 2), 2), &H10)
|
||||
Next i
|
||||
Return raw
|
||||
End Function
|
||||
|
||||
Public Shared Function GetUnixTimestamp() As Integer
|
||||
Return GetUnixTime(DateTime.UtcNow)
|
||||
End Function
|
||||
Public Shared Function GetUnixTime(ByVal dt As DateTime) As Integer
|
||||
Dim span As TimeSpan = (dt - New DateTime(1970, 1, 1, 0, 0, 0, 0).ToLocalTime())
|
||||
Return span.TotalSeconds
|
||||
End Function
|
||||
|
||||
Public Shared Function ByteArrayToHex(ByVal bytes_Input As Byte()) As String
|
||||
Dim strTemp As New StringBuilder(bytes_Input.Length * 2)
|
||||
For Each b As Byte In bytes_Input
|
||||
strTemp.Append(Conversion.Hex(b).PadLeft(2, "0"))
|
||||
Next
|
||||
Return strTemp.ToString()
|
||||
End Function
|
||||
<System.Diagnostics.DebuggerStepThrough()> Public Shared Function ExtraeValorCadena(ByVal Cadena As String, ByVal VariableBuscada As String, Optional Separador As String = ",", Optional SeparadorIgualdad As String = "=") As String
|
||||
Try
|
||||
Dim valores = Cadena.Split(Separador)
|
||||
Dim ValorBuscado = valores.FirstOrDefault(Function(x) x.Split(SeparadorIgualdad)(0).Trim.ToLower = VariableBuscada.ToLower)
|
||||
If ValorBuscado IsNot Nothing Then
|
||||
Return ValorBuscado.Split(SeparadorIgualdad)(1).Trim
|
||||
Else
|
||||
Return ""
|
||||
End If
|
||||
Catch ex As Exception
|
||||
Return ""
|
||||
End Try
|
||||
End Function
|
||||
<System.Diagnostics.DebuggerStepThrough()> Public Shared Function Ttagi(ByVal sValortag As String, ByVal sToken As String) As String
|
||||
Ttagi = ""
|
||||
Try
|
||||
sValortag = "|" & sValortag & "|"
|
||||
If InStr(1, "|" & sValortag & "|", "|" & sToken & "=", vbTextCompare) > 0 Then
|
||||
Ttagi = Mid(sValortag, (InStr(1, sValortag, "|" & sToken & "=") + Len(sToken) + 2), InStr(1, Mid(sValortag, InStr(1, sValortag, "|" & sToken & "=") + Len(sToken) + 2), "|") - 1)
|
||||
End If
|
||||
Catch ex As Exception
|
||||
Throw New Exception(ex.Message, ex)
|
||||
End Try
|
||||
End Function
|
||||
Public Shared Function FindType(ByVal name As String) As Type
|
||||
Dim base As Type
|
||||
|
||||
base = Reflection.Assembly.GetEntryAssembly.GetType(name, False, True)
|
||||
If base IsNot Nothing Then Return base
|
||||
|
||||
base = Reflection.Assembly.GetExecutingAssembly.GetType(name, False, True)
|
||||
If base IsNot Nothing Then Return base
|
||||
|
||||
For Each assembly As Reflection.Assembly In
|
||||
AppDomain.CurrentDomain.GetAssemblies
|
||||
base = assembly.GetType(name, False, True)
|
||||
If base IsNot Nothing Then Return base
|
||||
Next
|
||||
Throw New Exception("Clase no encontrada")
|
||||
End Function
|
||||
Public Shared Function StringAFechaHora(ByVal Fecha As String) As DateTime
|
||||
Dim sValores() As String = Fecha.Split("_")
|
||||
Dim dFecha As DateTime
|
||||
dFecha = New DateTime(sValores(0), sValores(1), sValores(2), sValores(3), sValores(4), sValores(5))
|
||||
Return dFecha
|
||||
End Function
|
||||
|
||||
Public Shared Function EnviarNotificacionSlack(ByVal mensaje As String, Optional ByVal otroTexto As String = "", Optional ByVal destinatario As String = "", Optional ByVal descripcionRemitente As String = "") As String
|
||||
Dim resultado As String = ""
|
||||
Try
|
||||
'// Escapar las cadenas para compatibilizaras con JSON.
|
||||
mensaje = Web.HttpUtility.JavaScriptStringEncode(mensaje)
|
||||
otroTexto = Web.HttpUtility.JavaScriptStringEncode(otroTexto)
|
||||
destinatario = Web.HttpUtility.JavaScriptStringEncode(destinatario)
|
||||
descripcionRemitente = Web.HttpUtility.JavaScriptStringEncode(descripcionRemitente)
|
||||
|
||||
Dim mensajeJSON As String = ""
|
||||
|
||||
If String.IsNullOrWhiteSpace(destinatario) Then
|
||||
destinatario = "#sevilla"
|
||||
End If
|
||||
If Environment.MachineName.ToUpper = "INTI" Then
|
||||
destinatario = "@danmun"
|
||||
End If
|
||||
If String.IsNullOrWhiteSpace(descripcionRemitente) Then
|
||||
'descripcionRemitente = String.Format(".NET {0}@{1}, {2}", Environment.UserName, Environment.MachineName, Environment.OSVersion)
|
||||
descripcionRemitente = String.Format(".NET {0}@{1}", Environment.UserName, Environment.MachineName)
|
||||
End If
|
||||
If String.IsNullOrWhiteSpace(otroTexto) Then
|
||||
mensajeJSON = String.Format("{{""channel"": ""{0}"", ""username"": ""notificaciones"", ""text"": ""*{1}* — {2}""}}", destinatario.Trim, descripcionRemitente.Trim, mensaje.Trim)
|
||||
Else
|
||||
mensajeJSON = String.Format("{{""channel"": ""{0}"", ""username"": ""notificaciones"", ""text"": ""*{1}* — {2} — _{3}_""}}", destinatario.Trim, descripcionRemitente.Trim, mensaje.Trim, otroTexto.Trim)
|
||||
End If
|
||||
Using client As New Net.WebClient()
|
||||
ServicePointManager.ServerCertificateValidationCallback = AddressOf AcceptAllCertifications
|
||||
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12
|
||||
Dim response As Byte() = client.UploadValues("https://hooks.slack.com/services/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", New Specialized.NameValueCollection() From {
|
||||
{"payload", mensajeJSON}
|
||||
})
|
||||
resultado = System.Text.Encoding.UTF8.GetString(response)
|
||||
Console.WriteLine(resultado)
|
||||
End Using
|
||||
Catch ex As Exception
|
||||
'Nada. No quiero que esto ocasiones problemas allá donde sea utilizado.
|
||||
End Try
|
||||
Return resultado
|
||||
End Function
|
||||
|
||||
Private Shared Function AcceptAllCertifications(sender As Object, certificate As X509Certificate, chain As X509Chain, sslPolicyErrors As SslPolicyErrors) As Boolean
|
||||
Return True
|
||||
End Function
|
||||
|
||||
Public Shared Function GenerarCsvDesdeDataTable(dt As DataTable, Optional ByVal separador As Char = ";") As String
|
||||
Dim sb As New Text.StringBuilder()
|
||||
For i As Integer = 0 To dt.Columns.Count - 1
|
||||
sb.Append("""" & dt.Columns(i).ToString & """")
|
||||
If i < dt.Columns.Count - 1 Then
|
||||
sb.Append(separador)
|
||||
End If
|
||||
Next
|
||||
sb.AppendLine()
|
||||
For Each dr As DataRow In dt.Rows
|
||||
For i As Integer = 0 To dt.Columns.Count - 1
|
||||
sb.Append("""" & dr(i).ToString() & """")
|
||||
|
||||
If i < dt.Columns.Count - 1 Then
|
||||
sb.Append(separador)
|
||||
End If
|
||||
Next
|
||||
sb.AppendLine()
|
||||
Next
|
||||
Return sb.ToString()
|
||||
End Function
|
||||
End Class
|
||||
Public Class DescripcionValor
|
||||
Property Descripcion As String
|
||||
Property Valor As Integer
|
||||
Public Shared Function EnumADescripcionValor(Enumeracion As Type) As List(Of DescripcionValor)
|
||||
Dim values As Array = [Enum].GetValues(Enumeracion)
|
||||
Dim underlyingType As Type = [Enum].GetUnderlyingType(Enumeracion)
|
||||
'Dim arr As Array = Array.CreateInstance(underlyingType, values.Length)
|
||||
Dim lista As New List(Of DescripcionValor)
|
||||
|
||||
For i As Integer = 0 To values.Length - 1
|
||||
Dim dv As New DescripcionValor
|
||||
dv.Valor = values.GetValue(i)
|
||||
dv.Descripcion = values(i).ToString.Replace("_", " ")
|
||||
lista.Add(dv)
|
||||
Next
|
||||
Return lista
|
||||
End Function
|
||||
Public Shared Function EnumADescripcionValorAmpliado(Enumeracion As Type) As List(Of DescripcionValor)
|
||||
Dim values As Array = [Enum].GetValues(Enumeracion)
|
||||
Dim underlyingType As Type = [Enum].GetUnderlyingType(Enumeracion)
|
||||
'Dim arr As Array = Array.CreateInstance(underlyingType, values.Length)
|
||||
Dim lista As New List(Of DescripcionValor)
|
||||
|
||||
For i As Integer = 0 To values.Length - 1
|
||||
Dim dv As New DescripcionValor
|
||||
dv.Valor = values.GetValue(i)
|
||||
dv.Descripcion = values(i).ToString.Replace("_", " ") & " (" & dv.Valor.ToString & ")"
|
||||
lista.Add(dv)
|
||||
Next
|
||||
Return lista
|
||||
End Function
|
||||
|
||||
End Class
|
||||
Reference in New Issue
Block a user