let result = bitOperator(2, 1, ‘<’) // result = 4 2 << 1 = 4
### 5. randomColor随机颜色
function randomColor() {
let rgb = []
for (let i = 0; i < 3; ++i) {
let color = Math.floor(Math.random() * 256).toString(16)
color = color.length == 1 ? ‘0’ + color : color
rgb.push(color)
}
return ‘#’ + rgb.join(‘’)
}
生成随机颜色,返回格式为#RRGGBB的颜色值。通过随机生成RGB值来得到各种随机颜色。
使用例子:
let color = randomColor()
// color = #52a3ef
>
> 使用时无须传参,直接调用即可得到随机颜色。
>
>
>
### 6. uuid生成UUID
function uuid() {
let s = []
let hexDigits = ‘0123456789abcdef’
for (let i = 0; i < 36; i++) {
s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1)
}
s[14] = ‘4’ // bits 12-15 of the time_hi_and_version field to 0010
s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1) // bits 6-7 of the clock_seq_hi_and_reserved to 01
s[8] = s[13] = s[18] = s[23] = ‘-’
let uuid = s.join(‘’)
return uuid
}
该工具函数用于生成UUID(Universally Unique IDentifier)。UUID是一种按照标准生成的编号,通常用来作为标识符,保证全球唯一。
使用例子:
let uuid = uuid()
// uuid = ‘9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d’
>
> 使用时无须传参,直接调用即可得到UUID。
>
>
>
### 8. checkIDCard校验身份证
function checkIDCard(idCard) {
let idCardReg = /1[0-9]{5}([1][9][0-9]{2}|[2][0][0|1][0-9])([0][1-9]|[1][0|1|2])([0][1-9]|[1|2][0-9]|[3][0|1])[0-9]{3}([0-9]|[X])$/
if (!idCardReg.test(idCard)) {
return false
}
let idCardWi = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
let idCardY = [1, 0, ‘X’, 9, 8, 7, 6, 5, 4, 3, 2]
let idCardWiSum = 0
for (let i = 0; i < 17; i++) {
idCardWiSum += idCardWi[i] * idCard[i]
}
let idCardMod = idCardWiSum % 11
let idCardLast = idCardY[idCardMod]
if (idCardLast != idCard[17].toUpperCase()) {
return false
}
return true
}
>
> 该工具函数用于校验中国公民身份证号码是否正确。它采用正则表达式判断格式是否正确,并结合校验码算法判断最后一位校验码是否正确。
>
>
>
使用例子:
let valid = checkIDCard(‘45030319990821232X’)
// valid = true
let valid = checkIDCard(‘45030319990821231X’)
// valid = false 最后一位校验码错误
### 9. checkPhone校验手机号
function checkPhone(phone) {
let phoneReg = /^1[3-9]\d{9}$/
return phoneReg.test(phone)
}
该工具函数用于校验手机号格式是否正确。采用正则表达式匹配11位数的数字,以1开头,第二位数为3-9的手机号。
使用例子:
let valid = checkPhone(‘18912341234’)
// valid = true
let valid = checkPhone(‘28912341234’)
// valid = false 第二位数不在3-9范围内
### 10. checkEmail校验邮箱
function checkEmail(email) {
let emailReg = /2+([._\-]*[a-z0-9])*@([a-z0-9]+[-a-z0-9]*[a-z0-9]+.){1,63}[a-z0-9]+$/
return emailReg.test(email)
}
>
> 该工具函数用于校验邮箱地址格式是否正确。采用正则表达式匹配xxxx@xxxx.xxx结构的邮箱,其中xxxxx代表5-63个字母、数字、点号或减号。
>
>
>
使用例子:
let valid = checkEmail(‘1234567@qq.com’)
// valid = true
let valid = checkEmail(‘1234567@.com.cn’)
// valid = false 中间只有一个点,格式错误
### 11. isBankCount 校验银行卡格式
function isBankCount(bankno) {
let banknoReg = /3{13,25}$/
if (!banknoReg.test(bankno)) {
uni.showToast({
title: ‘银行卡号格式错误’,
icon: ‘error’,
duration: 2000
})
return false
}
if (bankno.length < 13 || bankno.length > 25) {
uni.showToast({
title: ‘银行卡号长度错误’,
icon: ‘error’,
duration: 2000
})
return false
}
var newArr = []
for (var i = 0; i < bankno.length; i++) {
newArr.push(bankno.substr(i, 1))
}
if (bankno.length == 19) { // 19位1个校验位
var checkNum = 0
for (var i = 0; i < 18; i++) {
checkNum = checkNum + parseInt(newArr[i]) * (i % 2 == 0 ? 1 : 2)
}
checkNum = checkNum % 10 == 0 ? 10 : checkNum % 10
checkNum = 10 - checkNum
} else if (bankno.length == 20) { // 20位2个校验位
var checkNum1 = 0
var checkNum2 = 0
for (var i = 0; i < 18; i++) {
if (i % 2 == 0) {
checkNum1 = checkNum1 + parseInt(newArr[i])
} else {
checkNum2 = checkNum2 + parseInt(newArr[i]) * 2
if (checkNum2 > 9) checkNum2 = checkNum2 - 9
}
}
checkNum1 = checkNum1 % 10 == 0 ? 10 : checkNum1 % 10
checkNum2 = checkNum2 % 10 == 0 ? 10 : checkNum2 % 10
checkNum1 = 10 - checkNum1
checkNum2 = 10 - checkNum2
}
// Luhn算法
if (bankno.length == 16 || bankno.length == 18) {
var lastNum = bankno.substr(bankno.length - 1, 1)
var first15Num = bankno.substr(0, bankno.length - 1)
var newArr = []
for (var i = first15Num.length - 1; i > -1; i–) {
newArr.push(first15Num.substr(i, 1))
}
// Luhn校验代码…
}
if (checkNum == lastNum && bankno.length == 19) {
return true
} else if (checkNum1 == lastNum[0] && checkNum2 == lastNum[1] && bankno.length == 20) {
return true
} else {
uni.showToast({
title: ‘银行卡号校验失败’,
icon: ‘error’,
duration: 2000
})
return false
}
}
>
> 银行卡号Luhn算法校验,确保卡号输入正确,避免误操作。Luhn算法也称模10算法,是一种简单的校验算法,广泛用于信用卡号、银行卡号等账号的有效性校验。`使用时直接调用参数为银行卡号就行`isBankCount(num)
>
>
>
### 11.isSameMonth 判断两天时间是否是同一个月
function isSameMonth (date1, date2) {
var start = new Date(date1.replace(“-”, “/”).replace(“-”, “/”));
var end = new Date(date2.replace(“-”, “/”).replace(“-”, “/”));
return start.getFullYear() == end.getFullYear() && start.getMonth() == end.getMonth();
}
>
> 使用方法 : `isSameMonth (第一天时间,第二天时间)`
>
>
>
### 12.getFirstDay 获取本月第一天是几月几号
function getFirstDay () {
var date = new Date();
var year = date.getFullYear();
var month = date.getMonth() + 1;
var firstDay = year + “-” + month + “-01”;
return firstDay;
}
>
> 使用方法:`getFirstDay ()`直接调用
>
>
>
### 13.checkDate 两天日期不允许超过指定天数
function checkDate (dataone, datatwo,dayNum) {
var start = new Date(dataone.replace(“-”, “/”).replace(“-”, “/”));
var end = new Date(datatwo.replace(“-”, “/”).replace(“-”, “/”));
var days = end.getTime() - start.getTime();
var time = parseInt(days / (1000 * 60 * 60 * 24));
if (time > dayNum) {
uni.showToast({
title: ``两天日期不允许超过${dayNum}天!`,
icon: ‘error’
})
return false;
} else {
return true;
}
}
>
> 使用方式:`checkDate(第一天时间, 第二天时间,相隔天数)`
>
>
>
### 14.base64src base64转临时路径
function base64src(base64data, fun){
const base64 = base64data; //base64格式图片
const time = new Date().getTime();
const imgPath = wx.env.USER_DATA_PATH + “/poster” + time + “share” + “.mp4”;
//如果图片字符串不含要清空的前缀,可以不执行下行代码.
const imageData = base64.replace(/^data:video/\w+;base64,/, “”);
const file = wx.getFileSystemManager();
file.writeFileSync(imgPath, imageData, “base64”);
fun(imgPath);
};
使用方法:
base64src('对应的base64码', (res) => {
//res便是临时路径
});
### 15.临时路径转base64兼容小程序APP,PC端
/**
* @description 本地图片转base64 * @param {number} path 图片本地路径 * @returns Promise对象 */
const toBase64 = (path) => {
return new Promise((resolve, reject) => {
// #ifdef APP-PLUS
plus.io.resolveLocalFileSystemURL(path, (entry) => { entry.file((file) => {
let fileReader = new plus.io.FileReader() fileReader.readAsDataURL(file) fileReader.onloadend = (evt) => { let base64 = evt.target.result.split(“,”)[1] resolve(base64) } }) })
// #endif
// #ifdef H5
uni.request({ url: path, responseType: ‘arraybuffer’, success: (res) => { resolve(uni.arrayBufferToBase64(res.data)) } })
// #endif
// #ifdef MP-WEIXIN
uni.getFileSystemManager().readFile({ filePath: path, encoding: ‘base64’, success: (res) => { resolve(res.data) } })
// #endif
})}export { toBase64}
使用方法:单独封装到tool.js文件夹,然后在需要使用的地方先引入,
let convert = require(‘./tool.js’)
convert.toBase64(tempFilePaths[0]).then((res) => {
this.imgBase64 = res })
### 总结
类似的工具函数还有很多,这里暂时不一一列举了,上面提到的银行卡校验,还可以使用阿里公开的一个校验接口`https://ccdcapi.alipay.com/validateAndCacheCardInfo.json?cardNo=银行卡号码&cardBinCheck=true` 这个接口会返回对应的`银行简称`,`银行卡类型`,如果想要显示对应的`银行logo`的话,可以联系我,由于JSON数据太大,没办法全部放在这里。
**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**
**深知大多数HarmonyOS鸿蒙开发工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**
**因此收集整理了一份《2024年HarmonyOS鸿蒙开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**
![img](https://img-blog.csdnimg.cn/img_convert/19628dde05081f273fe2db26a8a68323.png)
![img](https://img-blog.csdnimg.cn/img_convert/e840fc6f35dd1adc8ace9e869d0416bc.png)
![img](https://img-blog.csdnimg.cn/img_convert/ef856949f97d4461a900034b086ec9ee.png)
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上HarmonyOS鸿蒙开发知识点,真正体系化!**
**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新**
**如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注鸿蒙获取)**
![img](https://img-blog.csdnimg.cn/img_convert/3982c8860b338a0f40624a5212560ed2.png)
**一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
[外链图片转存中...(img-oAYI5b5H-1712863911469)]
[外链图片转存中...(img-ZEVn65Ej-1712863911469)]
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上HarmonyOS鸿蒙开发知识点,真正体系化!**
**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新**
**如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注鸿蒙获取)**
[外链图片转存中...(img-ycVgdZVq-1712863911470)]
**一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**