Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-06-2007
Ledian_Fdez Ledian_Fdez is offline
Miembro
 
Registrado: jun 2006
Ubicación: Ciudad Habana, Cuba
Posts: 242
Poder: 18
Ledian_Fdez Va por buen camino
Lightbulb Algoritmo!!!

Holas amigos:

Alguien conoce de algun algorito o funcion en C++Builder, que me sirva para saber si un No. de Carnet de Identidad es valido, al menos sus primeros 6 digitos.

Salu2
Ledian.
Responder Con Cita
  #2  
Antiguo 14-06-2007
Avatar de ArdiIIa
[ArdiIIa] ArdiIIa is offline
Miembro Premium
 
Registrado: nov 2003
Ubicación: Valencia city
Posts: 1.481
Poder: 22
ArdiIIa Va por buen camino
Supongo que te refieres al NIF, el cual, supongo que no debería ser muy problemático traspasarlo a C++
__________________
Un poco de tu generosidad puede salvar la vida a un niño. ASÍ DE SENCILLO
Responder Con Cita
  #3  
Antiguo 14-06-2007
Ledian_Fdez Ledian_Fdez is offline
Miembro
 
Registrado: jun 2006
Ubicación: Ciudad Habana, Cuba
Posts: 242
Poder: 18
Ledian_Fdez Va por buen camino
Lightbulb funcion CI

Amigos mios:

El carnet de Identidad consta de 11 digitos, y yo lo que quiero es hacer una funcion que me permita substraer los primeros 6 digitos (estos corresponde con la fecha de nacimiento) y de ahí separarlos de 2 en 2, por ejemplo:

CI = 81042805227
8104028 = fecha de nacimiento
81 = año
04 = mes
28 = día

y quiciera validar si esa fecha es correcta

salu2
Ledian
Responder Con Cita
  #4  
Antiguo 15-06-2007
Avatar de AntonioG
AntonioG AntonioG is offline
Miembro
 
Registrado: jun 2007
Posts: 17
Poder: 0
AntonioG Va por buen camino
Question

Hola,

Que llevas hecho?

En que tienes almacenado ese carnet de identidad? (char *, AnsiString)

Saludos
Responder Con Cita
  #5  
Antiguo 18-06-2007
Ledian_Fdez Ledian_Fdez is offline
Miembro
 
Registrado: jun 2006
Ubicación: Ciudad Habana, Cuba
Posts: 242
Poder: 18
Ledian_Fdez Va por buen camino
Angry Ci?

El carnet de identidad lo guardo en una variable de tipo String.
Y hasta ahora lo que se me ocurre es ir tomando de 2 en dos lo 6 primeros caracteres, la complicacion de todo esto es como sabes si es una fecha valida. Digamos por ejemplo cuando un mes trae 30, 31, 28 o 29.

Salu2
Ledian
Responder Con Cita
  #6  
Antiguo 18-06-2007
Avatar de AntonioG
AntonioG AntonioG is offline
Miembro
 
Registrado: jun 2007
Posts: 17
Poder: 0
AntonioG Va por buen camino
Hola,

Pues todos los meses son faciles de checar menos Febrero, por eso de los años bisiestos, los meses siempre tienen este numero de dias:
Enero 31
Febrero 28 o 29
Marzo 31
Abril 30
Mayo 31
Junio 30
Julio 31
Agosto 31
Septiembre 30
Octubre 31
Noviembre 30
Dicienmbro 31


De la formula es apara clauyclar cuando un año es bisiesto ahorita no al tengo, al rato la busoc bien, solo me acuerdo algo como que si un año es multiplo de 4 pero no de 400 es bisiesto )al rato lo busco bien=.
Para saber si es multiplo, pues usas el operador modulo )o residuo de division entera= :%

Se usa asi:
supongamos que el numeor lo guardas en n, en tonces i:
n%4==0 <---es multiplo de 4
n%4!=0 <---NO es multiplo de 4

Asi que para 400, pues queda asi:

n%400==0 <---es multiplo de 400
n%400!=0 <---NO es multiplo de 400

Saludos
Responder Con Cita
  #7  
Antiguo 18-06-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Prueba con esta función:

Código Delphi [-]
function EsFechaValida(S: String): Boolean;
var
  Y, M, D: Word;
  Fecha: TDateTime;

begin
  Y := StrToIntDef(Copy(S, 1, 2), 0);
  M := StrToIntDef(Copy(S, 3, 2), 0);
  D := StrToIntDef(Copy(S, 5, 2), 0);

  if Y*M*D > 0 then
    Result := TryEncodeDate(Y + 1900, M, D, Fecha)
  else
    Result := false;
end;

Y por cierto, trata de dar títulos más descriptivos para tus mensajes.

// Saludos
Responder Con Cita
  #8  
Antiguo 18-06-2007
Avatar de AntonioG
AntonioG AntonioG is offline
Miembro
 
Registrado: jun 2007
Posts: 17
Poder: 0
AntonioG Va por buen camino
Hola,

Basandome en lo que puso roman y en algo que viene en la ayuda de CBuilder, para CBuilder seria asi:
Código:
void __fastcall TForm1::Button1Click(TObject *Sender)

{
  TDateTime dt;
  AnsiString  fecha;//<--aqui va la fecha

  try
  {
    dt = EncodeDate((Word)StrToInt("19"+fecha.SubString(1,2)), (Word)StrToInt(fecha.SubString(3,2)), (Word)StrToInt(fecha.SubString(5,2)));
    Label1->Caption = DateToStr(dt);
  }
  catch(...)
  {
    Application->MessageBox("Invalid day, month, or year.", "EncodeDate Example", MB_OK);
  }
}
En fecha va primero el año, luego el mes y leugo el dia, pro eemplo:
fecha="810227";


Saludos
P.D. La linea
Label1->Caption = DateToStr(dt);
la puedes quitar.

Última edición por AntonioG fecha: 18-06-2007 a las 22:20:24.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Algoritmo Quickhull juanchi Varios 14 13-10-2016 11:57:16
Algoritmo de encriptación JoeyJordison Varios 5 21-11-2006 13:01:29
algoritmo de ordenacion mahlon Varios 9 04-09-2006 18:05:15
Algoritmo MD5 tbolzan Varios 1 19-10-2004 15:13:47
algoritmo de encriptración Rubiel Varios 25 21-07-2003 07:51:03


La franja horaria es GMT +2. Ahora son las 12:21:41.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi