8000 GitHub - kesmeey/tools
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

kesmeey/tools

Repository files navigation

tools

该库是模仿 Java 的hutool工具库,利用moonbit重构,编写一些实用的,偏向业务的工具库(判断身份证是否合法,手机号是否合法等)

检测 18 位身份证是否合法


fn main {
    let id1 = "11010519491231002X";
    let id2 = "11010519491231002Y";
    let id3 = "123456789012345678";
    println(@tools.is_valid_18_card(id1)); // 应输出 true
    println(@tools.is_valid_18_card(id2)); // 应输出 false
    println(@tools.is_valid_18_card(id3)); // 应输出 false
}

隐藏身份证的部分号码

fn main {
    let id_18 = "110105199001011234"
    println("原始号码: " + id_18)///原始号码: 110105199001011234
    println("隐藏生日: " + @tools.hide_id_card(id_18, 6, 14))///隐藏生日: 110105********1234
    println("隐藏尾号: " + @tools.hide_id_card(id_18, 14, 18))///隐藏尾号: 11010519900101****

}

提取身份证的信息

fn main {
    let id_18 = "210202200107285894"
 // 提取身份证信息
    match @tools.parse_id_card(id_18) {
        Some(info) => {
            println("\n身份证信息:")
            println("省份代码: " + info.get_province_code()) ///省份代码: 21
            println("省份名称: " + info.get_province())///省份名称: 辽宁
            println("出生日期: " + info.get_birth_date())///出生日期: 2001-07-28
            let gender = if info.get_gender() == 1 { "男" } else { "女" }
            println("性别: " + gender)///性别: 男
            println("年龄: " + info.get_age().to_string())///年龄: 23
        }
        None => println("解析身份证信息失败")
    }

}

输出全部身份证信息


fn main {
    let id_18 = "210202200107285894"
 // 提取身份证信息
    match @tools.parse_id_card(id_18) {
        Some(info) => {
          print(info.to_string())
        }
        None => println("解析身份证信息失败")
    }

}
///输出IdCard{provinceCode='21', cityCode='2102', birthDate=2001-7-28, gender=1, age=23}

计算器函数

fn main {
  let s1 = "3/3 "
  let s2 = "3 + 3 * 3"
  let s3 = "3-(1+5)+3^3"
  let mut ans = @tools.calculate(s1)
  println(ans)// 1
  ans = @tools.calculate(s2)
  println(ans)// 12
  ans = @tools.calculate(s3)
  println(ans)// 24
}

排列组合函数

fn main {
   let test1 = @tools.arrangement_count(4, 2)
   println(test1)//A(4,2) = 12
    let test2 = @tools.arrangement_count(3, 3)
    println(test2)//A(3,3) = 6
    let test3 = @tools.combination_count(4, 2)
    println(test3)//C(4,2) = 6
    let test4 = @tools.combination_count(3, 3)
    println(test4)//C(3,3) = 1
}

检测社会信用卡是否合法

fn main {
     let valid_code = "92371000MA3MXH0E3W"
     let invalid_code = "1234567890123456789"
     println(@tools.is_credit_code(valid_code))///true
     println(@tools.is_credit_code(invalid_code))///false
}

生成随机社会信用卡字符串

fn main {
     let valid_code = @tools.random_credit_code()
     println(valid_code)
     println(@tools.is_credit_code(valid_code))// 应输出true

}

验证邮箱是否合法


fn main {
  let valid_email = "test@example.com"
  let invalid_email = "testexample.com"
  println(@tools.is_valid_email(valid_email)) // true
  println(@tools.is_valid_email(invalid_email))//false
}

检验中国护照号码是否合法


fn main {
  print(@tools.is_valid_chinese_passport("G12345678")) //true
  print(@tools.is_valid_chinese_passport("EA1234567")) //true
  print(@tools.is_valid_chinese_passport("12345678")) //false
}

验证纳税人识别号是否合法

fn main {
  print(@tools.is_valid_taxpayer_id("2101060015848291")) //true
  print(@tools.is_valid_taxpayer_id("123456789012345I")) //false
  print(@tools.is_valid_taxpayer_id("1234567890")) //false
}

检测手机号是否合法

fn main {
    let phone1 = "13800138000";
    let phone2 = "12800138000";
    let phone3 = "1234567890";
    println(@tools.is_mobile_cn(phone1)); // 应输出 true
    println(@tools.is_mobile_cn(phone2)); // 应输出 false
    println(@tools.is_mobile_cn(phone3)); // 应输出 false
}

检验密码强度

fn main {
  print(@tools.get_password_strength_text("123456")) //弱密码
  print(@tools.get_password_strength_text("abc123ABC")) //中等强度密码
  print(@tools.get_password_strength_text("Abc123ojpj!@#")) //强密码
}

脱敏函数(隐藏手机号,姓名等敏感信息)

///|
fn main {
  // 示例:用户ID脱敏
  let id = "1234567890"
  let ans = @tools.desensitize(id.to_string(), @tools.UserId)
  println("脱敏后的id为:\{ans}")

  // 示例:中文姓名脱敏
  let name = "段正淳"
  let ans = @tools.desensitize(name.to_string(), @tools.ChineseName)
  println("脱敏后的姓名为:\{ans}")

  // 示例:身份证号脱敏
  let id_card = "51343620000320711X"
  let ans = @tools.desensitize(id_card.to_string(), @tools.IdCard)
  println("脱敏后的身份证号为:\{ans}")

  // 示例:手机号脱敏
  let phone = "18049531999"
  let ans = @tools.desensitize(phone.to_string(), @tools.MobilePhone)
  println("脱敏后的手机号为:\{ans}")

  // 示例:邮箱脱敏
  let email = "duandazhi-jack@gmail.com.cn"
  let ans = @tools.desensitize(email.to_string(), @tools.Email)
  println("脱敏后的邮箱为:\{ans}")

  // 示例:银行卡号脱敏
  let bank_card = "6222021234567890123"
  let ans = @tools.desensitize(bank_card.to_string(), @tools.BankCard)
  println("脱敏后的银行卡号为:\{ans}")

  // 示例:IPv4地址脱敏
  let ipv4 = "192.168.1.1"
  let ans = @tools.desensitize(ipv4.to_string(), @tools.IPV4)
  println("脱敏后的IPv4地址为:\{ans}")

  // 示例:IPv6地址脱敏
  let ipv6 = "2001:0db8:86a3:08d3:1319:8a2e:0370:7344"
  let ans = @tools.desensitize(ipv6.to_string(), @tools.IPV6)
  println("脱敏后的IPv6地址为:\{ans}")

  // 示例:仅显示第一个字符
  let str = "123456789"
  let ans = @tools.desensitize(str.to_string(), @tools.FirstMask)
  println("脱敏后的字符串为:\{ans}")

  // 示例:清空字符串
  let str = "123456789"
  let ans = @tools.desensitize(str.to_string(), @tools.ClearToEmpty)
  println("清空后的字符串为:\{ans}")
}
//输出为
//脱敏后的id为:0
//脱敏后的姓名为:段**
//脱敏后的身份证号为:5***************1X
//脱敏后的手机号为:180****1999
//脱敏后的邮箱为:d*************@gmail.com.cn
//脱敏后的银行卡号为:6222 **** **** **** 123
//脱敏后的IPv4地址为:192.*.*.*
//脱敏后的IPv6地址为:2001:*:*:*:*:*:*:*
//脱敏后的字符串为:1********
//清空后的字符串为:

验证车牌号是否有效(支持电动车和非电动车车牌)


fn main {
  let car_license_valid = @tools.is_valid_car_license("京A12345".to_string())
  let electric_car_license_valid = @tools.is_valid_car_license("沪BD67890")
  println(car_license_valid)// true
  println(electric_car_license_valid)     // true
  let car_license_invalid = @tools.is_valid_car_license("京12345")
  println(car_license_invalid) // false
}


检测字符串是否为存英文,纯数字

fn main {
  let test1 = @tools.is_number("bbb")
  println(test1) // false
  let test2 = @tools.is_number("114514")
  println(test2)  // true
  let test3 = @tools.is_chinese("中文")
  println(test3)  // true
  let test4 = @tools.is_chinese("中文123")
  println(test4)  // false
}

检测文件路径是否合法

fn main {
  let test1 = @tools.is_windows_path("C:\\Windows\\System32")
  println(test1) // true
  let test2 = @tools.is_windows_path("1:/Documents/test.txt")
  println(test2) // false
  let test3 = @tools.is_linux_path("/usr/local/bin")
  println(test3) // true
  let test4 = @tools.is_linux_path("/test//file")
  println(test4) // false
}


检测ipv4 ip地址是否合法

fn main {
  print(@tools.is_valid_ipv4("192.168.1.1.1")) //flase
  print(@tools.is_valid_ipv4("192.168.0.1")) //true
  print(@tools.is_valid_ipv4("255.255.255.255")) //true
}

检查ipv6 ip是否合法

fn main {
  print(@tools.is_valid_ipv6("2001:0db8:85a3:0000:0000:8a2e:0370:7334")) //true
  print(@tools.is_valid_ipv6("2001:db8:85a3::8a2e:370:7334")) //true
  print(@tools.is_valid_ipv6("gggg:0db8:85a3:0000:0000:8a2e:0370:7334")) //false
}
  // 测试有效的IPv6地址

将long 的数值改为ipv4

fn main {
  print(@tools.long_to_ipv4(3232235777L)) //"192.168.1.1"
  print(@tools.long_to_ipv4(0)) //"0.0.0.0"
  print(@tools.long_to_ipv4(-1)) //负数返回空字符串
}

将ipv4改为long

fn main {
  print(@tools.ipv4_to_long("192.168.1.1")) //3232235777
  print(@tools.ipv4_to_long("0.0.0.0")) //0
  print(@tools.ipv4_to_long("1.1.1")) //不是ip返回-1
}

将字符串从驼峰命名法改成连接符命名,或者将连接符命名改为驼峰命名法

///|
fn main {
  let a = "hello_world"
  let test1 = @tools.to_camel_case(a)
  print(test1)//helloWorld
  let test2 = @tools.to_underline_case(test1)
  print(test2)//hello_world
}

检测 2 个字符串的相似度

fn main {
  print(@tools.similar("hello", "hello")) //完全相同,输出1.0
  print(@tools.similar("hello", "helo")) //大部分相同 0.8
  print(@tools.similar("你好世界", "你好地球")) //一半相同 0.5
  print(@tools.similar("", "")) //都为空,认为全部相同
}

检测字符串是否包含emoj


fn main {
  print(@tools.contains_emoji("aaa")) //flase
  print(@tools.contains_emoji("❤️大")) //true
  print(@tools.contains_emoji("☀️")) //true

}

统计字符串a在字符串b出现了多少次

fn main {
  print(@tools.count_substring("aaa", "aa")) //3
  print(@tools.count_substring("😊😊😊", "😊")) //3
  print(@tools.count_substring("hello world", "xyz")) //0

}

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •  
0