#chile #rut #chilean-rut-utils

rut-lib

A Rust Library for validate/generate an Chilean ID (RUT)

2 releases

0.1.2 Dec 19, 2019
0.1.1 Dec 19, 2019
0.1.0 Dec 19, 2019

#1427 in Parser implementations

Download history 8/week @ 2024-05-03 42/week @ 2024-05-10 32/week @ 2024-05-17 22/week @ 2024-05-24 54/week @ 2024-05-31 102/week @ 2024-06-07 51/week @ 2024-06-14 63/week @ 2024-06-21 7/week @ 2024-06-28 41/week @ 2024-07-05 30/week @ 2024-07-12 52/week @ 2024-07-19 63/week @ 2024-07-26

187 downloads per month

MIT license

19KB
272 lines

Rut Library 🇨🇱

Build Status codecov Crates.io Documentation

A Rust library for parsing, format and validate a Chilean ID (RUT)

Usage

This crate is on crates.io and can be used by adding rut-lib to your dependencies in your project's Cargo.toml.

[dependencies]
rut-lib = "0.1.2"

If you're using Rust 2015, then you'll also need to add it to your crate root:

extern crate rut_lib;

Examples

Parsing from String

A easy way to validate and create a Rut using the from method, this returns a Result<Rut, Error>

The input must be a valid String format, a few examples:

  • 17.951.585-7
  • 17951585-7
  • 179515857
use rut_lib::Rut;

let stringifier_rut = "17951585-7";

match Rut::from(stringifier_rut) {
    Ok(rut) => {
        println!("Number: {:#}", rut.number());
        println!("DV: {:#}", rut.dv());
        println!("RUT: {:#}", rut)
    },
    Err(error) => println!("Error: {:#}", error)
}

Output

Number: 17951585
DV: 7
RUT: 17951585-7

Error behaviour

Error::InvalidFormat

use rut_lib::Rut;

let stringifier_rut = "17,951,585-7";

match Rut::from(stringifier_rut) {
    Ok(rut) => println!("RUT: {:#}", rut),
    Err(error) => println!("Error: {:#}", error)
}

Output

Error: The input format is invalid

Error::InvalidDV

use rut_lib::Rut;

let stringifier_rut = "17951585K";

match Rut::from(stringifier_rut) {
    Ok(rut) => println!("RUT: {:#}", rut),
    Err(error) => println!("Error: {:#}", error)
}

Output

Error: Invalid DV, must be 7, instead K.

Parsing from Number

Create a Rut using the from_number method (If you don't have a DV), this returns a Result<Rut, Error>

The input must be a number (u32) and stay in a range from 1_000_000 to 99_999_999

use rut_lib::Rut;

let number = 24136773;

match Rut::from_number(number) {
    Ok(rut) => {
        println!("Number: {:#}", rut.number());
        println!("DV: {:#}", rut.dv());
        println!("RUT: {:#}", rut)
    },
    Err(error) => println!("Error: {:#}", error)
}

Output

Number: 24136773
DV: 8
RUT: 24136773-8

Error behaviour

Error::OutOfRange

use rut_lib::Rut;

let number = 999_999;

match Rut::from_number(number) {
    Ok(rut) => {
        println!("RUT: {:#}", rut)
    },
    Err(error) => println!("Error: {:#}", error)
}

Output

Error: The input number must be between 1.000.000 to 99.999.999

Randomize Rut

Generate a randomize rut from scratch for testing use

Example:

use rut_lib::Rut;

let rut = Rut::randomize();

println!("Number: {:#}", rut.number());
println!("DV: {:#}", rut.dv());
println!("RUT: {:#}", rut);

Output

Number: 56606059
DV: 0
RUT: 56606059-0

Prettify Format

The to_format method receive a Format (enum) as input to returns a Prettify Rut

use rut_lib::{Rut, Format};

let input = "179515857";
let rut = Rut::from(input).unwrap();

println!("Dots: {}", rut.to_format(Format::DOTS));
println!("Dash: {}", rut.to_format(Format::DASH));
println!("None: {}", rut.to_format(Format::NONE));

Output

Dots: 17.951.585-7
Dash: 17951585-7
None: 179515857

License

This project is licensed under the terms of the MIT License.

Dependencies

~4–5.5MB
~101K SLoC