Uno de los datos importantes del mandato SEPA es el «identificador del acreedor» o «creditor Identifier» que tiene una regla de construcción un poco enrevesada en cuanto al cálculo del código de control.
En Españal formato es este: ESZZXXXAAAAAAAAA, siendo:
- ES: código del país España según la norma ISO 3166
- ZZ: dígitos de control (cuyo cálculo se explica a continuación)
- XXX: sufijo (normalmente 000, pero el acreedor puede gestionar más de un canal de adeudos poniendo otros valores)
- AAAAAAAAA: CIF del acreedor, frecuentemente una letra seguida de 8 cifras, sin espacios, guiones u otros símbolos.
Los dígitos de control se calculan en base al NIF, aplicando el modelo 97-10 (regla de cálculo definida en la norma ISO 7604 y ampliamente usada en la norma ISO 20022, UNIFI).
- Tomamos posiciones de la 8 a la 15, es decir el CIF, añadiendo ES y 00
Por ejemplo, en el caso de EADTrust, B85626240ES00
- Convertimos letras a números, considerando que la A es 10, la B es 11, … la E es 14, … la S es 28, … hasta que la Z es 35.
Por ejemplo, en el caso de EADTrust, 1185626240142800
- Aplicamos modelo 97-10 (dado un número, lo dividimos entre 97 y restamos a 98 el resto de la operación. Si se obtiene un único dígito, se completa con un cero a la izquierda)
Por ejemplo, en el caso de EADTrust, el resto de dividir 1185626240142800 entre 97 sale 21 y 98-21=77, por tanto el código completo: ES77000B85626240
Después de introducir el código ES no debería haber 3 ceros y no 2(tal y como aparece en el ejemplo)?
En esta web hay una calculadora del identificador del acreedor:
http://caigrupoibercaja.caja3.es/paginas/idAcreedor.asp?idNodo=2918
Pingback: Anónimo
Pingback: Identificador Acreedor SEPA e IBAN | Utilidad automática para cáculo
Se que al realizar esta operación con Excel da error #Num#, esto se debe a que Excel no puede dividir un numero tan grande, Microsoft propone una solución usando la función Entero en lugar de residuo y funciona
si la celda A1 es el numero a calcular el Dígito de Control la función quedaría de la siguiente forma:
=A1-(ENTERO(A1/97)*97)
=1185626240142800-(ENTERO(1185626240142800/97)*97)=21
Después ya realizas el resto de 98-21=77
Funciona
Gracias. Y me concuerda con una web donde tambien ayudan a calcularlo.
Os la anoto aqui: http://www.maric.info/fin/SEPA
Un saludo
Hola, hay algún programita o excel como el que calcula la letra del dni?
Hola, yo tengo problemas, en el ordenador con el ejemplo me sale en algunos casos 20 y otros 21 de resto, si uso un dni que empieza por 71…. pasa lo mismo no sale bien, en visual basic tampoco me lo calcula bien, alguna ayuda?
Hola, tengo u DNI de persona fisica y es imposible calcularlo. me sale un desfase de uno o dos, lo he intentado con verios dni y nada.
Alguna ayuda? gracias.
y si el NIF es de una persona física, es decir la letra va al final, el cálculo es el mismo convirtiendo en este caso la letra final en número…?
Hola, Por si sirve de algo, como es un calculo que no hay que hacer de forma habitual, lo he calculado de forma manual, y como es una cifra muy grande para casi todas las calculadoras, he usado la que trae Windows, en modo Ver, Cientifica, de ese modo me admite la cantidad.
Pingback: Diferencias entre la modalidad B2B y la básica del mandato SEPA de adeudo por domiciliaciones | Todo es electrónico
Esta función, calcula el MOD de un numero muy largo (que es pasado como texto).
Public Function NTSSuperMod(NumeroLargo As String, AplicarMod As Long) As String
‘esta función se basa en que el mod, se puede calcular a trozos,
Dim F As Long
Dim C As String
Dim NuevoChar As String
Dim MMod As Long
NuevoChar = NumeroLargo
Do
For F = 1 To Len(NuevoChar)
C = C & Mid(NuevoChar, F, 1)
If F Mod 5 = 0 Then
If IsNumeric(C) Then
MMod = Val(C) Mod AplicarMod
If MMod 0 Then
NuevoChar = Trim(MMod) & Mid(NuevoChar, 6)
Else
NuevoChar = Mid(NuevoChar, 6)
End If
C = «»
Exit For
End If
End If
Next
If Len(NuevoChar) < 6 Then
Exit Do
End If
Loop
NTSSuperMod = Val(NuevoChar) Mod AplicarMod
End Function
'no esta probada del todo, pero creo que es correcta.
Calculo Mod97. Funcionando y comprobada.
Public Function Mod97(Num As String) As Integer
Dim lngTemp As Long
Dim strTemp As String
Do While Val(Num) >= 97
If Len(Num) > 5 Then
strTemp = Left(Num, 5)
Num = Right(Num, Len(Num) – 5)
Else
strTemp = Num
Num = «»
End If
lngTemp = CLng(strTemp)
lngTemp = lngTemp Mod 97
strTemp = CStr(lngTemp)
Num = strTemp & Num
Loop
Mod97 = CInt(Num)
End Function
If sNifoDni = «D» Then ‘ dni
sTemp = Numero & CStr(Valor) & «142800»
Else ‘Nif
sTemp = CStr(Valor) & Numero & «142800»
End If
sSalida = 98 – Mod97(sTemp)
Donde dice : «Tomamos posiciones de la 8 a la 15, »
¿ no debería ser Tomamos posiciones de la 8 a la 16 ?,
Yo entiendo que sí, porque la primera posición del CIF es la 8ª y el CIF tiene 9 posiciones ( 1 letra y 8 dígitos) y de la 8 a la 15, sólo van 8 dígitos, en cambio de la 8 a la 16 van 9.
Tenéis razón. Lo corrijo en el artículo…
¿Como puedo validar si un resultado es correcto?, por el problema del excel tengo una duda, que no consigo solucionar.. Gracias por vuestros comentarios
En mi pregunta anterior confundí mi email de respuesta, sorry
Hola
Estoy intentando crear un único codigo de identificador del acreedor y no lo consigo, tengo una duda entre el 94 o 95, pero no es facil resolverlo por el problema del excel, ni validar el resultado.
Pingback: Seminario: Adaptación a SEPA de los adeudos por domiciliaciones « Todo es electrónico
Hola, antetodo gracias por este aticulo.
Pero investigando un poco ya que me ha llamado la atencion de que el rango de los digitos calculados estarian entre 02..98, he buscado la norma ISO 7604 (y de paso agregarla a mi carpeta de isos ;-). Por un lado no he logrado encontrar dicha norma, y por otro, entre las multiples referencias a dicha norma, si he encontrado un calculo que al menos me parece mas logico y es:
digitos de control -> Mod( 98 – Mod( dato * 100, 97), 97)
Como se puede ver aqui el rango es de 0..96 que en formato de 2 digitos: 00..96
Dicho esto para mi la duda estas si existen comienzos de ES00, ES01 o bien ES97, ES98
Gracias
El código va de 2 a 98. La fórmula no es sencilla de implementar en Excel porque hay un bug reconocido de Excel con grandes números que hace necesario fraccionar la formulación. Además las fórmulas cambian según se use la versión en inglés o la versión en español de Excel.
La herramienta la vamos a entregar sin coste extra a los asistentes al curso de @AteneaI sobre Mandatos SEPA programado para el 17 de dicembre: «Adaptación a SEPA de los adeudos por domiciliaciones»
¿Hay algún sitio, del estilo del conversor de IBAN de SEPA, donde validar que los cálculos para el «Identificador del Acreedor» realizados son correctos?
Con el ejemplo me funciona perfecto pero me gustaría probar alguno más.
Ahhhhhhhhh y mil gracias por el artículo que me ha sido de gran utilidad.
Nosotros hemos desarrollado una herramienta para hacerlo automáticamente. Si me envías una hoja excel con los códigos a convertir, te la devuelvo convertida.
Un cordial saludo,
La conversión que haces de letras a números no es correcta. Empieza por A = 10, B = 11, etc.
Tienes razón. Me despisté. Ya lo he corregido en el artículo. En el ejemplo ponía el valor correcto.