Re: Diferencias entre CFD (V2.0) y CFDI (V3.0)
Publicado: Vie Sep 24, 2010 9:42 pm
Muy bueno, pero las dudas? "SE PUBLICARA EN EL BLOG"
Cual BLOG?
Saludos.
Cual BLOG?
Saludos.
FACTURA ELECTRONICA EN MEXICO
https://www.validacfd.com/phpbb3/
Es correcto, me falto poner en el primer post que la V3.0 ya NO LLEVA noAprobacion ni anoAprobacion.link_zda escribió:Para los CFDi tampoco vamos a necesitar el noAprobación y anoAprobacion incluidos en la V2.0 ¿es correcto?
En el complemento Timbrado Fiscal ¿cuales serían los nodos que debemos dejar vacios para que el SAT los llene? ¿Todos excepto la versión? o de esto aún no ha dicho nada el SAT.
Saludos.
Código: Seleccionar todo
||3.0|2010-03-06T20:38:12|ingreso|PAGO EN UNA SOLA EXHIBICION|488.50|||488.50|PPL961114GZ1|PHARMA PLUS SA DE CV|AV. RIO MIXCOAC|No. 140|ACACIAS|BENITO JUAREZ|MEXICO, D.F.|Mexico|03240|AV. UNIVERSIDAD|1858|OXTOPULCO|DISTRITO FEDERAL|Mexico|03910|PEPJ8001019Q8|JUAN PEREZ PEREZ|AV UNIVERSIDAD|16 EDF 3|DPTO 101|COPILCO UNIVERSIDAD|COYOACAN|DISTRITO FEDERAL|Mexico|04360|1.0|CAPSULAS|VIBRAMICINA 100MG 10|244.00|244.00|1.0|BOTELLA|CLORUTO 500M|137.93|137.93|1.0|TABLETAS|SEDEPRON 250MG 10|84.50|84.50|IVA|0.00|0.00|IVA|16.00|22.07||
Código: Seleccionar todo
public static bool ValidarComprobante(Generic.CFD.Core.IComprobante cfd, byte[] cerRawData)
{
X509Certificate cer;
cer = new X509Certificate(cerRawData);
string cerNum = Security.Crypto.GetCerNumber(cer);
if (cerNum != cfd.noCertificado)
throw new CFD.ExceptionUnexpectedCSD(string.Format("El certificado usado '{0}' no concuerda con el especificado '{1}'", cfd.noCertificado, cerNum));
//Generar la cadena en caso de que no haya sido generada antes
if (string.IsNullOrEmpty(cfd.cadenaOriginal))
cfd.cadenaOriginal = cfd.GenerarCadenaOriginal();
RSACryptoServiceProvider rsa = Security.Crypto.GetPublicKeyFromX509Certificate(cer);
if (rsa == null)
throw new CFD.ExceptionInvalidCSD("Certificado no válido");
byte[] bCadena = Encoding.UTF8.GetBytes(cfd.cadenaOriginal);
byte[] bSello = System.Convert.FromBase64String(cfd.sello);
try
{
//SHA1 para version 3.0
string hash = GetHashFunction(bSello);
//Solo para asegurarme que la función este funcionando correctamente
debug.Assert(cfd.version == "3.0" && hash == "SHA1");
//Verificar
return rsa.VerifyData(bCadena, System.Security.Cryptography.CryptoConfig.MapNameToOID(hash), bSello);
}
catch (Exception ex)
{
throw new CFD.ExceptionValidaCFD("Error al validar el sello", ex);
}
}