js常用校验,包含:手机号/固话/账号/密码/身份证/军官证/组织机构代码/社会信用代码,等等

/* 手机号码 */
export const phone = /^[1][345678][0-9]{
    
    9}$/
/* 固话 */
export const telephone = /^(\(\d{
    
    3,4}\)|\d{
    
    3,4}-|\s)?\d{
    
    7,14}$/
/* 邮箱 */
export const email = /^[A-Za-z0-9\u4e00-\u9fa5]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/
/* 账号 */
export const account = /^[a-zA-Z].[a-zA-Z0-9_-]{
    
    2,20}$/
/* 密码 - 弱验证 */
export const weekPassword = /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{
    
    6,20}$/
/* 密码 - 强验证 (必须包含数字、字母、大写字母和字符中的三种) */
export const strongPassword = /^(?=.*([a-zA-Z].*))(?=.*[0-9].*)(?=.*[A-Z-+.\-=_~!@#$%^&*()])[a-zA-Z0-9-+.\-=_~!@#$%^&*()]{8,20}$/
/* 密码(必须包含数字和字母,且可以包含字符) */
export const password = /(?=.*([a-zA-Z].*))(?=.*[0-9].*)[a-zA-Z0-9-*/+.-_~!@#$%^&*()]{6,20}$/
/* 身份证 */
export const idCard = /^[1-9]\d{
    
    7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{
    
    3}$|^[1-9]\d{
    
    5}[1-9]\d{
    
    3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{
    
    3}([0-9]|X)$/
/* 军官证 */
export const officerCard = /^[\u4E00-\u9FA5](字第)([0-9a-zA-Z]{
    
    4,8})(号?)$/
/*  */
export const passportCard = /^([a-zA-z]|[0-9]){
    
    5,17}$/
/* ip */
export const ip = /^(\d{
    
    1}|[1-9]{
    
    1}\d{
    
    1}|1\d\d|2[0-4]\d|25[0-5])\.(\d{
    
    1}|[1-9]{
    
    1}\d{
    
    1}|1\d\d|2[0-4]\d|25[0-5])\.(\d{
    
    1}|[1-9]{
    
    1}\d{
    
    1}|1\d\d|2[0-4]\d|25[0-5])\.(\d{
    
    1}|[1-9]{
    
    1}\d{
    
    1}|1\d\d|2[0-4]\d|25[0-5])$/

export const decimalTwo = /(^[1-9]([0-9]+)?(\.[0-9]{
    
    1,2})?$)|(^(0){
    
    1}$)|(^[0-9]\.[0-9]([0-9])?$)/

/* 社会信用代码 */
export function creditCode(code) {
    
    
  if (!code) {
    
    
    return false
  }

  const pattern = /^[0-9A-Za-z]+$/

  if (code.length !== 18 || pattern.test(code) === false) {
    
    
    return false
  } else {
    
    
    let v // 统一社会信用代码的每一个值
    let w // 统一社会信用代码每一个值的权重
    let t = 0

    const weightedFactors = [
      1,
      3,
      9,
      27,
      19,
      26,
      16,
      17,
      20,
      29,
      25,
      13,
      8,
      24,
      10,
      30,
      28
    ] // 加权因子
    const str = "0123456789ABCDEFGHJKLMNPQRTUWXY" // 不用I、O、S、V、Z

    // 权重与加权因子相乘之和
    for (let i = 0; i < code.length - 1; i++) {
    
    
      v = code.substring(i, i + 1).toUpperCase() // 小写自动转为大写
      w = str.indexOf(v)
      t = t + w * weightedFactors[i]
    }

    let logicCheckCode = 31 - (t % 31)

    if (logicCheckCode === 31) {
    
    
      logicCheckCode = 0
    }

    const codes = [
      "0",
      "1",
      "2",
      "3",
      "4",
      "5",
      "6",
      "7",
      "8",
      "9",
      "A",
      "B",
      "C",
      "D",
      "E",
      "F",
      "G",
      "H",
      "J",
      "K",
      "L",
      "M",
      "N",
      "P",
      "Q",
      "R",
      "T",
      "U",
      "W",
      "X",
      "Y"
    ]
    const checkCode = code.substring(17, 18).toUpperCase()

    logicCheckCode = codes[logicCheckCode]

    return logicCheckCode === checkCode
  }
}
/* 组织机构代码 */
export function organCode(code) {
    
    
  if (code != null) {
    
    
    const ws = [3, 7, 9, 10, 5, 8, 4, 2]
    const str = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    const reg = /^([0-9A-Za-z]){
    
    8}-[0-9|Xx]$/
    let sum = 0
    for (let i = 0; i < 8; i++) {
    
    
      sum += str.indexOf(code.charAt(i).toUpperCase()) * ws[i]
    }
    let c9 = 11 - (sum % 11)
    c9 = c9 === 10 ? "X" : c9 // 获得校验码
    const validStr = code.charAt(9).toUpperCase() // 第9位小写转为大写

    return !(!reg.test(code) || String(c9) !== validStr)
  }
}

猜你喜欢

转载自blog.csdn.net/anny_mei/article/details/117440320