/// <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()); }
// 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()); }
/// <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)); }
// 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 (); }
/// <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 (); }
/// <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)); }