Example #1
0
        /// <summary>
        /// Retorna un <see cref="System.String"/>
        /// que representa al <see cref="CxSoftware.RutSharp.Rut"/>.
        /// </summary>
        /// <returns>Un <see cref="System.String"/>
        /// que representa al <see cref="CxSoftware.RutSharp.Rut"/>
        /// según el formato definido por las reglas.
        /// </returns>
        /// <param name="reglas">Reglas para la generación del RUT</param>
        public string ToString(ReglasRut reglas)
        {
            var sb = new StringBuilder();

            // Part 1
            if ((reglas & ReglasRut.SinSeparadorDeMiles) == ReglasRut.SinSeparadorDeMiles)
            {
                sb.Append(this.Numero.ToString(CultureInfo.InvariantCulture));
            }
            else
            {
                sb.Append(this.Numero.ToString("#,#", ChileanCulture));
            }

            // Part 2
            if ((reglas & ReglasRut.SinGuion) == 0)
            {
                sb.Append("-");
            }

            // Part 3
            if ((reglas & ReglasRut.Minuscula) == ReglasRut.Minuscula)
            {
                sb.Append(this.DV.ToString().ToLower());
            }
            else
            {
                sb.Append(this.DV);
            }

            // Done
            return(sb.ToString());
        }
Example #2
0
        // Private static methods

        /// <summary>
        /// Crea la expresión regular para parsear el Rut según las reglas indicadas
        /// </summary>
        /// <returns>La expresión regular</returns>
        /// <param name="reglas">Reglas para el parseo del Rut</param>
        private static string BuildRegex(ReglasRut reglas)
        {
            // Init
            var sb = new StringBuilder();

            // Número
            if ((reglas & ReglasRut.ConSeparadorDeMiles) == ReglasRut.ConSeparadorDeMiles)
            {
                sb.Append("^(?<numero>[1-9]\\d{0,2}(\\.\\d{3}){0,2})");
            }
            else if ((reglas & ReglasRut.SinSeparadorDeMiles) == ReglasRut.SinSeparadorDeMiles)
            {
                sb.Append("^(?<numero>[1-9]\\d{0,8})");
            }
            else
            {
                sb.Append("^(?<numero>[1-9](\\d{0,2}(\\.\\d{3}){0,2}|\\d{0,8}))");
            }

            // Guión
            if ((reglas & ReglasRut.ConGuion) == ReglasRut.ConGuion)
            {
                sb.Append("\\-");
            }
            else if ((reglas & ReglasRut.SinGuion) != ReglasRut.SinGuion)
            {
                sb.Append("\\-?");
            }

            // DV
            if ((reglas & ReglasRut.Mayuscula) == ReglasRut.Mayuscula)
            {
                sb.Append("(?<dv>[0-9K])$");
            }
            else if ((reglas & ReglasRut.Minuscula) == ReglasRut.Minuscula)
            {
                sb.Append("(?<dv>[0-9k])$");
            }
            else
            {
                sb.Append("(?<dv>[0-9Kk])$");
            }

            // Done
            return(sb.ToString());
        }
Example #3
0
        /// <summary>
        /// Crea un nuevo RUT tomando en cuenta el texto ingresado
        /// y las reglas definidas
        /// </summary>
        /// <param name="texto">El texto del RUT</param>
        /// <param name="reglas">Reglas a aplicar</param>
        /// <returns>Rut</returns>
        public static Rut Parse(string texto, ReglasRut reglas)
        {
            // Build regex
            var regex = new Regex(BuildRegex(reglas));
            var match = regex.Match(texto);

            if (!match.Success)
            {
                throw new ArgumentException("El texto no tiene formato esperado: " + texto);
            }

            // Get parts
            var numero = int.Parse(match.Groups ["numero"].Value.Replace(".", string.Empty));
            var dv     = match.Groups ["dv"].Value [0];

            // Done
            return(new Rut(numero, dv));
        }
Example #4
0
        // Private static methods
        /// <summary>
        /// Crea la expresión regular para parsear el Rut según las reglas indicadas
        /// </summary>
        /// <returns>La expresión regular</returns>
        /// <param name="reglas">Reglas para el parseo del Rut</param>
        private static string BuildRegex(ReglasRut reglas)
        {
            // Init
            var sb = new StringBuilder ();

            // Cero a la izquierda
            if ((reglas & ReglasRut.ConCeroALaIzquierda) > 0)
                sb.Append ("^0");
            else if ((reglas & ReglasRut.SinCeroALaIzquierda) > 0)
                sb.Append ("^");
            else
                sb.Append ("^0?");

            // Número
            if ((reglas & ReglasRut.ConSeparadorDeMiles) > 0)
                sb.Append ("(?<numero>[1-9]\\d{0,2}(\\.\\d{3}){0,2})");
            else if ((reglas & ReglasRut.SinSeparadorDeMiles) > 0)
                sb.Append ("(?<numero>[1-9]\\d{0,8})");
            else
                sb.Append ("(?<numero>[1-9](\\d{0,2}(\\.\\d{3}){0,2}|\\d{0,8}))");

            // Guión
            if ((reglas & ReglasRut.ConGuion) > 0)
                sb.Append ("\\-");
            else if ((reglas & ReglasRut.SinGuion) == 0)
                sb.Append ("\\-?");

            // DV
            if ((reglas & ReglasRut.Mayuscula) > 0)
                sb.Append ("(?<dv>[0-9K])$");
            else if ((reglas & ReglasRut.Minuscula) > 0)
                sb.Append ("(?<dv>[0-9k])$");
            else
                sb.Append ("(?<dv>[0-9Kk])$");

            // Done
            return sb.ToString ();
        }
Example #5
0
        /// <summary>
        /// Retorna un <see cref="System.String"/>
        /// que representa al <see cref="CxSoftware.RutSharp.Rut"/>.
        /// </summary>
        /// <returns>Un <see cref="System.String"/>
        /// que representa al <see cref="CxSoftware.RutSharp.Rut"/>
        /// según el formato definido por las reglas.
        /// </returns>
        /// <param name="reglas">Reglas para la generación del RUT</param>
        public string ToString(ReglasRut reglas)
        {
            var sb = new StringBuilder ();

            // Part 0
            if ((reglas & ReglasRut.ConCeroALaIzquierda) > 0)
                sb.Append ("0");

            // Part 1
            if ((reglas & ReglasRut.SinSeparadorDeMiles) > 0)
                sb.Append (this.Numero.ToString (CultureInfo.InvariantCulture));
            else
                sb.Append (this.Numero.ToString ("#,#", ChileanCulture));

            // Part 2
            if ((reglas & ReglasRut.SinGuion) == 0)
                sb.Append ("-");

            // Part 3
            if ((reglas & ReglasRut.Minuscula) > 0)
                sb.Append (this.DV.ToString ().ToLower ());
            else
                sb.Append (this.DV);

            // Done
            return sb.ToString ();
        }
Example #6
0
 /// <summary>
 /// Crea un nuevo RUT tomando en cuenta el texto ingresado
 /// y las reglas definidas
 /// </summary>
 /// <param name="texto">El texto del RUT</param>
 /// <param name="reglas">Reglas a aplicar</param>
 /// <returns>Rut</returns>
 public static Rut Parse(string texto, ReglasRut reglas)
 {
     return Parse (
         texto,
         BuildRegex (reglas),
         numero => numero.Replace (".", string.Empty));
 }