Tuesday, October 25, 2016

Código Para Consultar Nombres De Reniec Por DNI - PERÚ

Con este artículo desempolvo mi BLOG después de nueve años, y como es mi estilo, si tanto preámbulo vamos al grano.

 Si deseamos consultar los datos de una persona mediante su DNI se ingresa al siguiente enlace de RENIEC:



Si procedo a realizar una consulta de DNI mediante el teclado de pantalla y tipeando el CAPTCHA, la web de RENIEC envía estos dos parámetros y devolviendo como resultado los nombres de la persona. El siguiente código realiza este proceso solicitando el CAPTCHA desde la web RENIEC y enviando estos dos parámetros para finalmente recepcionar el resultado en formato HTML.
  1. 'JAVIER ULLOA 24OCT16
  2. 'TECH FACTORY
  3. Imports System.Net
  4. Imports System.IO
  5. Public Class Form1
  6. #Region "VARIABLES"
  7.     Private miCookie As New CookieContainer
  8.     Public Enum eResultadoConsulta
  9.         ConsultaSatisfactoria = 1
  10.         ErrorDeCaptcha = 2
  11.         DniNoEncontrado = 3
  12.         Otro = 4
  13.     End Enum
  14. #End Region
  15. #Region "VOID"
  16.     Private Function obtieneImagenCaptcha()
  17.         Dim UrlCaptcha As HttpWebRequest = WebRequest.Create("https://cel.reniec.gob.pe/valreg/codigo.do")
  18.         UrlCaptcha.CookieContainer = Me.miCookie
  19.         ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3
  20.         UrlCaptcha.Credentials = CredentialCache.DefaultCredentials
  21.         Dim Captcha As WebResponse = UrlCaptcha.GetResponse
  22.         Dim imgCaptchaBinario As Stream = Captcha.GetResponseStream
  23.         Return Image.FromStream(imgCaptchaBinario)
  24.     End Function
  25.     Public Function ObtieneDatosReniec(ByVal str_dni As String, ByVal str_captcha As String) As eResultadoConsulta
  26.         Dim urlReniec As String = String.Format("https://cel.reniec.gob.pe/valreg/valreg.do?accion=buscar&nuDni={0}&imagen={1}", str_dni, str_captcha)
  27.         Dim enlaceReniec As HttpWebRequest = WebRequest.Create(urlReniec)
  28.         enlaceReniec.CookieContainer = Me.miCookie
  29.         ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3
  30.         enlaceReniec.Credentials = CredentialCache.DefaultCredentials
  31.         Dim respuesta_web As WebResponse = enlaceReniec.GetResponse
  32.         Dim myStream As Stream = respuesta_web.GetResponseStream
  33.         Dim myStreamReader As New StreamReader(myStream)
  34.         Dim Count As Integer = 0
  35.         Dim LineaVerificacionTexto As String = ""
  36.         While LineaVerificacionTexto = myStreamReader.ReadLine <> vbNull
  37.             Count += 1
  38.             Select Case Count
  39.                 Case 75
  40.                     LineaVerificacionTexto = myStreamReader.ReadLine.Trim
  41.                     LineaVerificacionTexto = myStreamReader.ReadLine.Trim
  42.                     If LineaVerificacionTexto.Trim.Length = 100 Then '<td height="63" class="style2" align="center">Ingrese el c&oacute;digo que aparece en la imagen</td>
  43.                         Return eResultadoConsulta.ErrorDeCaptcha
  44.                     End If
  45.                     LineaVerificacionTexto = myStreamReader.ReadLine.Trim
  46.                     If LineaVerificacionTexto.Trim.Length = 59 Then '<td height="63" class="style2" align="center">El DNI N&deg;
  47.                         Return eResultadoConsulta.DniNoEncontrado
  48.                     End If
  49.                     LineaVerificacionTexto = myStreamReader.ReadLine.Trim
  50.                     Me.lblNombres.Text = myStreamReader.ReadLine.ToString.Trim
  51.                     Me.lblApellidoPaterno.Text = myStreamReader.ReadLine.ToString.Trim
  52.                     Me.lblApellidoMaterno.Text = myStreamReader.ReadLine.ToString.Trim
  53.                     Me.lblApellidoMaterno.Text = Me.lblApellidoMaterno.Text.Replace("<br>", "")
  54.                     Return eResultadoConsulta.ConsultaSatisfactoria
  55.                     Exit While
  56.             End Select
  57.             LineaVerificacionTexto = myStreamReader.ReadLine.Trim
  58.         End While
  59.         Return eResultadoConsulta.Otro
  60.     End Function
  61. #End Region
  62.     Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  63.         Me.pbCapcha.Image = Me.obtieneImagenCaptcha
  64.     End Sub
  65.     Private Sub cmdConsultaDNI_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdConsultaDNI.Click
  66.         Me.lblApellidoMaterno.ResetText()
  67.         Me.lblApellidoPaterno.ResetText()
  68.         Me.lblNombres.ResetText()
  69.         Select Case Me.ObtieneDatosReniec(Me.txtDni.Text.Trim, Me.txtEscribirCodigo.Text.Trim)
  70.             Case eResultadoConsulta.DniNoEncontrado
  71.                 Me.lblError.Visible = True
  72.                 Me.lblError.Text = "DNI NO ENCONTRADO"
  73.             Case eResultadoConsulta.ErrorDeCaptcha
  74.                 Me.lblError.Visible = True
  75.                 Me.lblError.Text = "ERROR DE CAPTCHA"
  76.             Case Else
  77.                 Me.lblError.Visible = False
  78.         End Select
  79.     End Sub
  80.     Private Sub cmdRefrescar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdRefrescar.Click
  81.         Me.pbCapcha.Image = Me.obtieneImagenCaptcha
  82.         Me.lblError.Visible = False
  83.     End Sub
  84. End Class



DESCARGA

7 comments:

Steven Huaman Roman said...

MUY BIEN AMIGO MALKAVIAN... EXITOS!!!

MaLkAvIaN_NeT said...

Uno de estos días preparo el código y lo subiré a mi blog

Unknown said...

gracias por el aporte muy útil
quisiera saber si se puede hacer una consulta en donde tengo registrado
en una lista. ejemplo
cod - nombre - apellidos - direccion - dni - bien - mal

la columna dni estan registrados correctamente que te diga cuentos estan mal y bien



gracias

MaLkAvIaN_NeT said...

En un próximo artículo publicaré un código para pasarle OCR a las imágenes CAPTCHA con esto no se tendría que tipear el texto y se enviaría directamente como parámetro los DNI los cojes de tu lista y haces un bucle.

Anonymous said...

amigo muchas gracias pero un favor lo tendras en C#?, estoy aprendiendo de buenos tutoriales como el tuyo, saludos

Chats said...

Está excelente el código muchas gracias por el aporte, pero hay un detalle, en la tercera vez
que se consulta, el código se congela por largo rato en esta linea:

Dim imgCaptchaBinario As Stream = Captcha.GetResponseStream

Hay Alguna razón para que esto suceda?

Gracias.

Desarrolladores Web said...

Saludos
https://cel.reniec.gob.pe/valreg/codigo.do

este Link no esta funcionando tu tienes la solucion ???

Error
This page can't be displayed. Contact support for additional information.
The incident ID is: N/A.