![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
|||
|
|||
|
Calculo CRC-8
Hola a tod@s.
Os dejo código fuente para calcular el CRC-8: MICROFOCUS COBOL: $set sourceformat(variable) program-id. CRC8 as "CRC8". environment division. configuration section. data division. working-storage section. 01 CRC8-Table. 05 filler occurs 256. 10 tbByte PIC X(1). 10 tbByteNum redefines tbByte PIC S9(2) COMP-5. 01 cadena PIC X(256) VALUE "TBAI-00000006Y-251019-btFpwP8dcLGAF-". 01 len PIC 9(2) COMP-5. 01 crc PIC X(1). 01 crcNum redefines crc PIC 9(2) comp-5. 01 crcNumInt PIC S9(9) COMP-5. 01 idx-1 PIC 9(2) COMP-5. 01 tmpChar PIC X(1). 01 tmpIdx redefines tmpChar PIC S9(2) COMP-5. 01 tmpIdxInt PIC S9(9) COMP-5. procedure division. perform chargeTable perform getLen move 1 to idx-1 move 0 to crcNumInt perform until idx-1 > len move cadena(idx-1:1) to tmpChar move tmpIdx to tmpIdxInt call "CBL_XOR" using crcNumInt tmpIdxInt by value 4 display tmpIdxInt " " no advancing call "CBL_AND" using X"FF000000" tmpIdxInt by value 4 display tmpIdxInt " " tbByteNum(tmpIdxInt + 1) " " no advancing move tbByte(tmpIdxInt + 1) to crc move crcNum to crcNumInt display crcNumInt " " add 1 to idx-1 end-perform call "CBL_AND" using X"FF000000" crcNumInt by value 4 display crcNumInt move crcNumInt to crcNum display crcNum " " crc goback . chargeTable. string X"00", X"07", X"0E", X"09", X"1C", X"1B", X"12", X"15", X"38", X"3F", X"36", X"31", X"24", X"23", X"2A", X"2D", X"70", X"77", X"7E", X"79", X"6C", X"6B", X"62", X"65", X"48", X"4F", X"46", X"41", X"54", X"53", X"5A", X"5D", X"E0", X"E7", X"EE", X"E9", X"FC", X"FB", X"F2", X"F5", X"D8", X"DF", X"D6", X"D1", X"C4", X"C3", X"CA", X"CD", X"90", X"97", X"9E", X"99", X"8C", X"8B", X"82", X"85", X"A8", X"AF", X"A6", X"A1", X"B4", X"B3", X"BA", X"BD", X"C7", X"C0", X"C9", X"CE", X"DB", X"DC", X"D5", X"D2", X"FF", X"F8", X"F1", X"F6", X"E3", X"E4", X"ED", X"EA", X"B7", X"B0", X"B9", X"BE", X"AB", X"AC", X"A5", X"A2", X"8F", X"88", X"81", X"86", X"93", X"94", X"9D", X"9A", X"27", X"20", X"29", X"2E", X"3B", X"3C", X"35", X"32", X"1F", X"18", X"11", X"16", X"03", X"04", X"0D", X"0A", X"57", X"50", X"59", X"5E", X"4B", X"4C", X"45", X"42", X"6F", X"68", X"61", X"66", X"73", X"74", X"7D", X"7A", X"89", X"8E", X"87", X"80", X"95", X"92", X"9B", X"9C", X"B1", X"B6", X"BF", X"B8", X"AD", X"AA", X"A3", X"A4", X"F9", X"FE", X"F7", X"F0", X"E5", X"E2", X"EB", X"EC", X"C1", X"C6", X"CF", X"C8", X"DD", X"DA", X"D3", X"D4", X"69", X"6E", X"67", X"60", X"75", X"72", X"7B", X"7C", X"51", X"56", X"5F", X"58", X"4D", X"4A", X"43", X"44", X"19", X"1E", X"17", X"10", X"05", X"02", X"0B", X"0C", X"21", X"26", X"2F", X"28", X"3D", X"3A", X"33", X"34", X"4E", X"49", X"40", X"47", X"52", X"55", X"5C", X"5B", X"76", X"71", X"78", X"7F", X"6A", X"6D", X"64", X"63", X"3E", X"39", X"30", X"37", X"22", X"25", X"2C", X"2B", X"06", X"01", X"08", X"0F", X"1A", X"1D", X"14", X"13", X"AE", X"A9", X"A0", X"A7", X"B2", X"B5", X"BC", X"BB", X"96", X"91", X"98", X"9F", X"8A", X"8D", X"84", X"83", X"DE", X"D9", X"D0", X"D7", X"C2", X"C5", X"CC", X"CB", X"E6", X"E1", X"E8", X"EF", X"FA", X"FD", X"F4", X"F3" delimited by size into CRC8-Table . getLen. move 36 to len *> Fujitsu: function stored-cahr-length *> Otros: un bucle, unstring con x"00" o NOT = SPACES etc. . end program CRC8. WINDEV: PROCEDURE calcular_CRC8(Cadena is UNICODE string) CRC8_Table is array of byte = [0x00, 0x07, 0x0E, 0x09, 0x1C, 0x1B, 0x12, 0x15, 0x38, 0x3F, 0x36, 0x31, 0x24, 0x23, 0x2A, 0x2D, 0x70, 0x77, 0x7E, 0x79, 0x6C, 0x6B, 0x62, 0x65, 0x48, 0x4F, 0x46, 0x41, 0x54, 0x53, 0x5A, 0x5D, 0xE0, 0xE7, 0xEE, 0xE9, 0xFC, 0xFB, 0xF2, 0xF5, 0xD8, 0xDF, 0xD6, 0xD1, 0xC4, 0xC3, 0xCA, 0xCD, 0x90, 0x97, 0x9E, 0x99, 0x8C, 0x8B, 0x82, 0x85, 0xA8, 0xAF, 0xA6, 0xA1, 0xB4, 0xB3, 0xBA, 0xBD, 0xC7, 0xC0, 0xC9, 0xCE, 0xDB, 0xDC, 0xD5, 0xD2, 0xFF, 0xF8, 0xF1, 0xF6, 0xE3, 0xE4, 0xED, 0xEA, 0xB7, 0xB0, 0xB9, 0xBE, 0xAB, 0xAC, 0xA5, 0xA2, 0x8F, 0x88, 0x81, 0x86, 0x93, 0x94, 0x9D, 0x9A, 0x27, 0x20, 0x29, 0x2E, 0x3B, 0x3C, 0x35, 0x32, 0x1F, 0x18, 0x11, 0x16, 0x03, 0x04, 0x0D, 0x0A, 0x57, 0x50, 0x59, 0x5E, 0x4B, 0x4C, 0x45, 0x42, 0x6F, 0x68, 0x61, 0x66, 0x73, 0x74, 0x7D, 0x7A, 0x89, 0x8E, 0x87, 0x80, 0x95, 0x92, 0x9B, 0x9C, 0xB1, 0xB6, 0xBF, 0xB8, 0xAD, 0xAA, 0xA3, 0xA4, 0xF9, 0xFE, 0xF7, 0xF0, 0xE5, 0xE2, 0xEB, 0xEC, 0xC1, 0xC6, 0xCF, 0xC8, 0xDD, 0xDA, 0xD3, 0xD4, 0x69, 0x6E, 0x67, 0x60, 0x75, 0x72, 0x7B, 0x7C, 0x51, 0x56, 0x5F, 0x58, 0x4D, 0x4A, 0x43, 0x44, 0x19, 0x1E, 0x17, 0x10, 0x05, 0x02, 0x0B, 0x0C, 0x21, 0x26, 0x2F, 0x28, 0x3D, 0x3A, 0x33, 0x34, 0x4E, 0x49, 0x40, 0x47, 0x52, 0x55, 0x5C, 0x5B, 0x76, 0x71, 0x78, 0x7F, 0x6A, 0x6D, 0x64, 0x63, 0x3E, 0x39, 0x30, 0x37, 0x22, 0x25, 0x2C, 0x2B, 0x06, 0x01, 0x08, 0x0F, 0x1A, 0x1D, 0x14, 0x13, 0xAE, 0xA9, 0xA0, 0xA7, 0xB2, 0xB5, 0xBC, 0xBB, 0x96, 0x91, 0x98, 0x9F, 0x8A, 0x8D, 0x84, 0x83, 0xDE, 0xD9, 0xD0, 0xD7, 0xC2, 0xC5, 0xCC, 0xCB, 0xE6, 0xE1, 0xE8, 0xEF, 0xFA, 0xFD, 0xF4, 0xF3] Idx_1 is int = 1 Len is int = Length(Cadena) TmpIdx is bytes = 0 CrcNum is byte = 0 CRC is UNICODE string = "" Cadena = StringToUTF8(Cadena,charsetUTF8) FOR Idx_1 = 1 TO Len TmpIdx = Asc(Middle(Cadena,Idx_1,1)) TmpIdx = BinaryXOR(CrcNum,TmpIdx) TmpIdx = BinaryAND(0xFF,TmpIdx) CrcNum = CRC8_Table[TmpIdx + 1] END CrcNum = BinaryAND(0xFF,CrcNum) CRC = NumToString(CrcNum,"%03d") RESULT = CRC Saludos y gracias por todo. |
|
#2
|
|||
|
|||
|
Calculo Cifs
Lo prometiddo es deuda
Aquí os dejo los calculos de los cifs, españa, extranjero. Aún me queda una duda, que no me he peleado mucho, pero ya veo codigo fuente flotando en el aire y es hora del descanso. Resulta que para la comprobación del cif extranjeero se envia el cif dividido en 2 campos; Por un lado el identificador del pais Por otro Lado el resto del identificador. He probado con el identificador del Pais de 2 caracteres, por que resulta que hay de 2 caracteres, de 3 y otro identificadorn úmerico (os mando la tabla de paises en una excell), los probaré todos el Lunes, si probais vosotros antes decidme. XML Petición ejemplo comproobacion nif ESPAÑA Código:
<?xml version="1.0" encoding="utf-8"?>
<Spain:Envelope xmlns:Spain="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ELNIF="http://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/burt/jdit/ws/VNifV2Ent.xsd">
<Spain:Header/>
<Spain:Body>
<ELNIF:VNifV2Ent>
<ELNIF:Contribuyente>
<ELNIF:Nif>B63272603</ELNIF:Nif>
<ELNIF:Nombre>GOOGLE </ELNIF:Nombre>
</ELNIF:Contribuyente>
</ELNIF:VNifV2Ent>
</Spain:Body>
</Spain:Envelope>
curl.exe --connect-timeout 60 -m 60 -S -L -d "@C:\[path donde esta ubicado]\EnvioNif.xml" -o C:\[path respuesta]\RespuestaNif.xml --cert-type P12 --cert c:\[path certificado]\Ciudadano.pfx:82388133 https://www1.agenciatributaria.gob.e.../ws/VNifV2SOAP Ejemplo xml Petición Nif Extranjero Código:
<?xml version="1.0" encoding="utf-8"?>
<Extranjero:Envelope xmlns:Extranjero='http://schemas.xmlsoap.org/soap/envelope/'>
<Extranjero:Body>
<Datos:checkVat xmlns:Datos='urn:ec.europa.eu:taxud:vies:services:checkVat:types'>
<Datos:countryCode>FR</Datos:countryCode>
<Datos:vatNumber>08353523418</Datos:vatNumber>
</Datos:checkVat>
</Extranjero:Body>
</Extranjero:Envelope>
curl.exe --connect-timeout 60 -m 60 -S -L -d "@C:\[path donde esta ubicado]\EnvioNif_extranjero.xml" -o C:\[path respuesta]\RespuestaNif_extranjero.xml http://ec.europa.eu/taxation_customs...heckVatService Ojo: un cif extranjero no es el que empieza por X o Y, esos son cifs extranjeros adaptados a España y hay que comprobarlos según el Curl de España. Última edición por ermendalenda fecha: 02-10-2021 a las 10:13:47. |
|
#3
|
|||
|
|||
|
Tiene algunos detalles más.
https://www.agenciatributaria.es/AEA...spanola_.shtml Madre mía cada año meten más historias. Hace ya varios años que no repasaba esto. |
|
#4
|
|||
|
|||
|
Cita:
Sí, hay muchos casos posibles. En https://es.wikipedia.org/wiki/N%C3%B...%C3%B3n_fiscal tienes la información de cada uno de ellos y el algoritimo de verificación (cálculo de la letra en el DNI y del último dígito en el CIF) Saludos |
|
#5
|
|||
|
|||
|
Cita:
En PHP, llamando a la función COMPROBAR_DOCUMENTO($nif) : Código PHP:
|
|
#6
|
|||
|
|||
|
Cita:
Una cosa menos. |
|
#7
|
|||
|
|||
|
continuo con los CIFS, perdonad los que ya tengais este tema solucionado, pero creo que es una parte importante para que en el futuro no echen para atrás facturas enviadas por errores en los cif/nif/nie/Nombres y por lo tanto se queden facturas huerfanas (no se si se queda aceptado "00" o no aceptado, pero está claro que se va a quedar con errores)
Por lo que tengo visto lo normal es que los que están dado de alta en el ROI los 2 primeros caracteres identifique el país, pero sopresa, primera excepción que me encuentro: Los que empiezan por "ESN", las primeras letras no identifican al pais si no a "Entidades no residentes" por lo tanto tratamiento¿?: comprobar por el curl extranjero o español, por que el curl extranjero no admite "ESN", así que supongo que será español. Tenedlo en cuenta sobre todo los que trabajais programas que hacen facturas para laboratorios externos, holandeses, alemanes, etc, que se os va a dar más de un caso. Esto es más lioso de lo que esperaba, los que podais aportar ideas, documentos... se agradece Última edición por ermendalenda fecha: 03-10-2021 a las 10:20:10. |
|
#8
|
|||
|
|||
|
Cita:
Y una pregunta el Zuzendu de Gipuzkoa sabemos algo de el ? Última edición por Noe277 fecha: 04-10-2021 a las 09:17:34. |
|
#9
|
|||
|
|||
|
Cita:
Ni idea de Zuzendu |
|
#10
|
|||
|
|||
|
Cita:
Muchísimas gracias por la aportación. |
|
#11
|
|||
|
|||
|
Nada. Es buenísimo. Para los cifs españoles no hace falta que mandes nada en el nombre, te lo devuelve. Y te devuelve el cif, si te equivocas de letra te devuelve la letra correcta.
Para los nifs y nie tienes que mandarle una parte del nombre aproximada y te lo devuelve completo, lo que tienen registrado. Para los ESN se le quita El Es y se manda la consulta a la de España, son los no residentes (Extranjeros con un nif de alta en españa pero no están en el registro ROI), por ejemplo los chinos de Aliexpress, amazon, muchos laboratorios Europeos... Para los extranjeros: En el primer campo, siempre los 2 caracteres del país, y en el segundo el código. Y te devuelve nombre y dirección, que además creo que la he conseguido formatear para sacar dirección, ciudad, población y cod. Postal(aunque es un algoritmo aprox creo que vale para la mayoría de los casos, ya que al devolver la dirección en un solo campo hay que hacer inventos. Ten en cta que como devuelve la dirección con saltos de líneas (asc(10)) se puede más o menos formatear. Un consejo, cuando compreis productos chinos, normalmente el proveedor tiene un ESN o un VIES(Registro en el ROI), muchas veces falso, en ese caso no comprar nada, y podeis comprobarlo con estos CURLS. Última edición por ermendalenda fecha: 04-10-2021 a las 10:03:32. |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| SII -Nuevo sistema de la Agencia Tributaria española de envío de datos vía Webservice | newtron | Internet | 3716 | 19-01-2026 20:01:34 |
| Como utilizar la ayuda del nuevo Sistema Operativo | gluglu | Humor | 3 | 24-09-2007 09:39:05 |
| Aplicacion Agencia De Viajes | ArdiIIa | Varios | 9 | 20-01-2007 16:49:53 |
| El Vasco Aguirre | Al González | La Taberna | 5 | 26-05-2006 09:22:28 |
| Microsoft ha lanzado su nuevo sistema operativo | DarkByte | Humor | 0 | 25-01-2004 09:21:14 |
|