@wll8/better-mock
Version:
Forked from Mockjs. Generate random data & Intercept ajax request. Support miniprogram.
85 lines (72 loc) • 2.89 kB
text/typescript
// Miscellaneous
import * as basic from './basic'
import * as helper from './helper'
import * as date from './date'
import * as location from 'china-location/dist/location.json'
import * as util from '../utils'
const areas = location['default']
// 随机生成一个 guid
// http://www.broofa.com/2008/09/javascript-uuid-function/
export const guid = function (): string {
const pool = 'abcdefABCDEF1234567890'
return basic.string(pool, 8) + '-' + basic.string(pool, 4) + '-' + basic.string(pool, 4) + '-' + basic.string(pool, 4) + '-' + basic.string(pool, 12)
}
export const uuid = guid
// 随机生成一个 18 位身份证。
// http://baike.baidu.com/view/1697.htm#4
// [身份证](http://baike.baidu.com/view/1697.htm#4)
// 地址码 6 + 出生日期码 8 + 顺序码 3 + 校验码 1
// [《中华人民共和国行政区划代码》国家标准(GB/T2260)](http://zhidao.baidu.com/question/1954561.html)
export const id = function (): string {
let _id
let _sum = 0
const rank: string[] = ['7', '9', '10', '5', '8', '4', '2', '1', '6', '3', '7', '9', '10', '5', '8', '4', '2']
const last: string[] = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']
// 直筒子市,无区县
// https://baike.baidu.com/item/%E7%9B%B4%E7%AD%92%E5%AD%90%E5%B8%82
const specialCity = ['460400', '441900', '442000', '620200']
const province = helper.pickMap(areas)
const city = helper.pickMap(province.cities)
/* istanbul ignore next */
if (specialCity.indexOf(city.code) !== -1) {
return id()
}
const districts = city.districts
const district = helper.pick(util.keys(districts))
_id = district + date.date('yyyyMMdd') + basic.string('number', 3)
for (let i = 0; i < _id.length; i++) {
_sum += _id[i] * Number(rank[i])
}
_id += last[_sum % 11]
return _id
}
// 生成一个全局的自增整数。
// 类似自增主键(auto increment primary key)。
let key = 0
export const increment = function (step: number | string) {
return key += (Number(step) || 1) // step?
}
export const inc = increment
/**
* 随机生成一个版本号
* @param depth 版本号的层级,默认为3
*/
export const version = function (depth: number = 3): string {
const numbers: number[] = []
for (let i = 0; i < depth; i++) {
numbers.push(basic.natural(0, 10))
}
return numbers.join('.')
}
// 随机生成一个中国手机号
export const phone = function (): string {
const segments: string[] = [
// 移动号段
'134', '135', '136', '137', '138', '139', '147', '150', '151', '152', '157', '158', '159', '165', '172', '178', '182', '183', '184', '187', '188',
// 联通号段
'130', '131', '132', '145', '155', '156', '171', '175', '176', '185', '186',
// 电信号段
'133', '149', '153', '173', '174', '177', '180', '181', '189', '191'
]
return helper.pick(segments) + basic.string('number', 8)
}