Tamaño letra:

Sybase LogoEste artículo, lo mismo que el anterior -el que versa sobre arrays en Powerbuilder- y otros que iré publicando, estuvieron en el extinto sitio “Joomla-GNU”. Dicha web tuvo su época de apogeo ya que allí, además de muchos tutoriales, había un foro muy activo relativo al CMS Joomla, tanto que me obligó varias veces a ir mejorando el hosting hasta que finalmente, y por diversas razones personales y laborales, tuve que abandonar y finalmente eliminar.

De todas formas, el sitio “Riposa In Pace” en localhost porque es emocionante ver tanto trabajo compartido con otros desarrolladores a lo largo de los años. Me gusta de vez en cuando echar un vistazo e incluso rescatar información valiosa de distintos temas, incluso reflexiones. De allí sale este código, una función en Powerscript para validar un número de CUIT.

Para el que no lo sepa, Powerscript es el lenguaje que utiliza una gran herramienta de desarrollo llamada Powerbuilder. Con esa herramienta había hecho un voluminoso programa de gestión empresarial que finalmente no pude vender por los elevados costos que representaba la licencia y el tiempo de creación. Igualmente, representó un gran aprendizaje y fue un entorno y un lenguaje que me apasionaron, aún descansa en un Windows virtual todo ese paquetón de código.

Powerbuilder perteneció a la empresa Sybase que luego fue absorbida por SAP hasta que finalmente, estos cediero todo para que continúe la empresa Appeon con su desarrollo. Appeon que está formada ni más ni menos por gran parte de los que brindaban mantenimiento y soporte a la extinta Sybase. Hoy la licencia cuesta cerca de u$s 900 al año.

Por todo lo expuesto y a pedido de algunos correos recibidos -ya hace un tiempo-, vuelvo a colgar esta función para validar el CUIT porque aún es utilizable. Veamos...

CUIT significa "Código Único de Identificación Tributaria" y se refiere a un número que identifica a una persona física o a una sociedad ante el fisco. Este código está formado por una "tira" numérica de 13 dígicos y generalmente se la representa de la forma ##-########-#, siendo los dos primeros números los que señalan si se trata de una empresa o sociedad o de una persona física. Los 8 dígitos del medio corresponden al número de Documento Nacional de Identidad -en el caso de personas físicas- o al número de inscripción en ANSeS -en el caso de sociedades.

El número de CUIT se valida utilzando lo que se conoce como módulo 9 y el cálculo es más o menos este:

  1. Sabemos que para las personas físicas hombres los dos primeros dígitos pueden ser los números: 20 ó 23. El primero es el más común puesto, el 23 se utiliza cuando el DNI es "dudoso" (puede estar repetido).
  2. Para las personas físicas mujeres los dos primeros dígitos pueden ser los números: 27 ó 29. Siendo el primero el más común.
  3. Para las sociedades de cualquier tipo los dos primeros dígitos pueden ser los números: 30 ó 33.
  4. Los 8 números del medio corresponden al número de DNI o al número de inscripción en ANSeS como ya dijimos.

Veamos un ejemplo:

Supongamos este número: 20-12345678-y?

El cálculo se hace así:

A c/u de los 10 dígitos que conocemos, se multiplica por un número. Respectivamente: 5, 4, 3, 2, 7, 6, 5, 4, 3, 2.

Se suman los valores obtenidos, el resultado se divide por 11 y se toma sólo el resto o módulo R (el primer decimal).

Si R = 0, entonces Y = 0.

Si R = 1, entonces Y = 9.

Sino, Y = 11 - R.

DNI 12.345.678 Masculino

2 0 1 2 3 4 5 6 7 8

x

5 4 3 2 7 6 5 4 3 2

------------------------------------------

10+0+3+4+21+24+25+24+21+16= 148

148 mod 11 = 5 ( porque 148/11= 13,454 --> .454 se redondea a 5).

11-5 = 6

El CUIL es 20-12345678-6

Para el caso de la función que adjunto, en vez de definir el CUIT como un "número" lo defino como una tira de caracteres en la que solo se pueden ingresar números.

Ejemplo de uso de la función en un datawindows, evento "itemchanged" (descargarla de la sección "Descargas"):

1
2
3
4
5
6
ii_validarcuit=f_validar_cuit(data)
if ii_validarcuit=0 then
MessageBox("¡¡¡  Error !!!","El número de CUIT ingresado no es válido, reintente",StopSign!)
ib_noerror = TRUE
return 1
end if

Descargar código