Publicado en Programacion

C# WinForms – Formatear RUT Chileno

formatear-rut-chileno

Dejare aqui un mini tutorial para formatear un RUT chileno con separadores de miles el guion para el digito verificador.

OJO que NO VALIDA el RUT.

Entonces, a nuestro TextBox le agregaremos dos Eventos: KeyPress (solo permitira ciertos caracteres) y KeyUp (ejecutara el formateo).

Ejemplo, ingresamos el 19 y debe devolver 1-9:

formatear rut chileno 19

Al momento de escribir, se validan que solo sean carecteres permitidos (KeyPress) y por cada caracter (KeyUp) se llama a la funcion FormatearRut para la ejecucion final.

Resultado final en Pantalla:

formatear rut chileno 1-9

Aca dejo el codigo Csharp para los eventos y la funcion que hace el formato.

// solo numeros, puntos, guion y letra K
private void txtRUT_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsDigit(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (e.KeyChar.ToString().ToUpper().Equals("K"))
            {
                e.Handled = false;
            }
            else if (e.KeyChar.ToString().ToUpper().Equals("-"))
            {
                e.Handled = false;
            }
            else if (Char.IsControl(e.KeyChar)) //permitir teclas de control como retroceso 
            {
                e.Handled = false;
            }
            else
            {
                //el resto de teclas pulsadas se desactivan 
                e.Handled = true;
            }
        }
// ejecuta el formateo con cada tecla que presionemos
private void txtRUT_KeyUp(object sender, KeyEventArgs e)
        {
            txtRUT.Text = FormatearRut(txtRUT.Text);

            txtRUT.SelectionStart = txtRUT.Text.Length;
            txtRUT.SelectionLength = 0;
        }
// rutina que formatea con separadores de miles y agrega el guion
public static string FormatearRut(string rut)
        {
            string rutFormateado = string.Empty;

            if (rut.Length == 0)
            {
                rutFormateado = "";
            }
            else
            {
                string rutTemporal;
                string dv;
                Int64 rutNumerico;

                rut = rut.Replace("-", "").Replace(".", "");

                if (rut.Length == 1)
                {
                    rutFormateado = rut;
                }
                else
                {
                    rutTemporal = rut.Substring(0, rut.Length - 1);
                    dv = rut.Substring(rut.Length - 1, 1);

                    //aqui convierto a un numero el RUT si ocurre un error lo deja en CERO
                    if (!Int64.TryParse(rutTemporal, out rutNumerico))
                    {
                        rutNumerico = 0;
                    }

                    //este comando es el que formatea con los separadores de miles
                    rutFormateado = rutNumerico.ToString("N0");

                    if (rutFormateado.Equals("0"))
                    {
                        rutFormateado = string.Empty;
                    }
                    else
                    {
                        //si no hubo problemas con el formateo agrego el DV a la salida
                        rutFormateado += "-" + dv;

                        //y hago este replace por si el servidor tuviese configuracion anglosajona y reemplazo las comas por puntos
                        rutFormateado = rutFormateado.Replace(",", ".");
                    }
                }                
            }

            return rutFormateado;
        }		

TYDW.-

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s