技术标签: 算法 java 前端 js javascript
package com.xxx.demo.common.util;
import java.util.regex.Pattern;
public final class AcctIdUtils {
private static final Pattern acctCheckPattern = Pattern.compile("^(?:\\d{16}|\\d{19})$");
private static final Pattern acctCreatePattern = Pattern.compile("^(?:\\d{15,16}|\\d{18,19})$");
private AcctIdUtils () {
}
/**
* 校验银行卡号是否合法
* @param acctId 16位银行卡号或19位银行卡号
* @return true,银行卡号是否合法;else false
*/
public static boolean checkAcctId(String acctId) {
if (acctId == null || !acctCheckPattern.matcher(acctId).matches()) {
return false;
}
return acctId.equals(createAcctId(acctId));
}
/**
* 根据银行卡号前面的数字,生成完整的卡号
* @param acctId 有效数字为16位银行卡号的前15位,或19位银行卡号的前18位
* @return 完整的卡号
*/
public static String createAcctId(String acctId) {
if (acctId == null || !acctCreatePattern.matcher(acctId).matches()) {
return "";
}
int sum = 0;
int lastIndex = acctId.length() < 17 ? 14 : 17;
String preAcctId = acctId.substring(0, lastIndex + 1);
for (int i = 0; i <= lastIndex; i++) {
int unit = acctId.charAt(lastIndex - i) - '0';
if ((i & 1) == 0) {
if (unit < 5) {
sum += unit * 2;
} else {
sum += unit * 2 - 9;
}
} else {
sum += unit;
}
}
int remainder = sum % 10;
int checkCode = remainder == 0 ? 0 : 10 - remainder;
return preAcctId + checkCode;
}
}
(function (window) {
/**
* 根据银行卡号前面的数字,生成完整的卡号
* @param acctId 有效数字为16位银行卡号的前15位,或19位银行卡号的前18位
* @return string 完整的卡号
*/
var createAcctId = function (acctId) {
if (!acctId || !/^(?:\d{15,16}|\d{18,19})$/g.test(acctId)) {
return '';
}
acctId = '' + acctId;
var sum = 0;
var lastIndex = acctId.length < 17 ? 14 : 17;
var preAcctId = acctId.substring(0, lastIndex + 1);
for (var i = 0; i <= lastIndex; i++) {
var unit = acctId.charAt(lastIndex - i) - '0';
if ((i & 1) === 0) {
if (unit < 5) {
sum += unit * 2;
} else {
sum += unit * 2 - 9;
}
} else {
sum += unit;
}
}
var remainder = sum % 10;
var checkCode = remainder === 0 ? 0 : 10 - remainder;
return preAcctId + checkCode;
};
/**
* 校验银行卡号是否合法
* @param acctId 16位银行卡号或19位银行卡号
* @return boolean true,银行卡号是否合法;else false
*/
var checkAcctId = function (acctId) {
if (!acctId || !/^(?:\d{16}|\d{19})$/g.test(acctId)) {
return false;
}
acctId = '' + acctId;
return acctId === createAcctId(acctId);
};
window.checkAcctId = checkAcctId;
window.createAcctId = createAcctId;
})(window);
文章浏览阅读121次。Oracle PDH虽然并不是标准的PLM产品,但作为Oracle电子商务套件的有效补充,在流程控制方面的增强有效补充Oracle BOM/ENG等传统模块在产品信息管理方面的不足,对于已经实施了Oralce ERP..._pdh应用
文章浏览阅读80次。//自己定义了一个消息范例unitUnit1;interfaceusesWindows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,Dialogs,StdCtrls;constmy_messagedisp=Wm_user+201;..._delphi短信模板文字
文章浏览阅读153次。HTML5元素表文本元素超链接页面目标<a href ="目标">内容 </a>链接的目标(路径)可以是相对地址也可以是绝对地址。emment插件CTRL+D 复制光标所在行的内容锚点当前页面的跳转格式:1.ID属性的元素2.a中href的值是 (# + 1的属性值)功能a元素书写..._html5元素表
文章浏览阅读733次。mysql.sock 找不到问题解决方案[wangyuanyuan14@wangyuanyuan14 download]$ find ~/ -name mysql_install_db/home/users/wangyuanyuan14/.jumbo/bin/mysql_install_db[wangyuanyuan14@wangyuanyuan14 download]$ cd /home/users/wangyuanyuan14/.jumbo/[wangyuanyuan14@wangyuany_宝塔 /tmp/mysql.sock 不见了
文章浏览阅读679次。select * from dict where DictCode != '' and PId=5truncate table menuSELECT * FROM sys.foreign_keysWHERE referenced_object_id=OBJECT_ID('menu'); --找到引用该表的外键--ALTER TABLE dbo.XX DROP con..._sqlserver 去除主键
文章浏览阅读34次。在之前的有篇文章讲述了利用HeaderView来写类似QQ好友列表的表视图。这里写的天猫抽屉其实也可以用该方法实现,具体到细节每个人也有所不同。这里采用的是点击cell对cell进行运动处理以展开“抽屉”。最后完成的效果大概是这个样子。 主要的环节:点击将可视的Cell动画弹开。其他的Cell覆盖一层半透明视图,将视线焦点集中在弹出来的商品细分类别中。..._uitableview 实现商品分类
文章浏览阅读798次。Queueing(排队时间)如果某个请求正在排队,则指示:请求已被渲染引擎推迟,因为该请求的优先级被视为低于关键资源(例如脚本/样式)的优先级。 图像经常发生这种情况。请求已被暂停,以等待将要释放的不可用 TCP 套接字。请求已被暂停,因为在 HTTP 1 上,浏览器仅允许每个源拥有六个 TCP 连接。生成磁盘缓存条目所用的时间(通常非常迅速)Stalled(也即是从TCP连接建立完成,到真正可以..._浏览器计划已排队时间
文章浏览阅读216次。 在多核系统中,会存在多个CPU核竞争同一资源的情形,这就必须有一些机制来保证在竞争中不会出现错误,即同步互斥机制。这里主要针对同步互斥原语之一的自旋锁进行一点分析和记录。上图为一个多核系统的中断部分,很显然中断部分会存在许多竞争相关问题。自旋锁(Spinlock) 自旋锁是用来在多处理器环境中工作的一种特殊的锁,用于控制共享资源的访问,是一种同步原语。当一个CPU正访问自旋锁..._xchg总线
文章浏览阅读1k次。react-native-android-guide 。 地址:https://github.com/jiangqqlmj/react-native-android-guidereact-native,解决了原生app,开发周期长,开发成本高,升级代价大的问题.或许你还在犹豫,一门新的语言让他再发展发展再学也不迟,但是在中国你懂的,学技术要从技术还是娃娃的时候学起。_reactnative guide
文章浏览阅读186次。关键字、保留字、标识符、变量_程序中, 保留关键字, 类型说明符, 变量名,
文章浏览阅读3.2k次。ContentProvider结合Room保存数据库ContentProvider结合Room保存数据库1. ContentProvider使用理解执行顺序重写Provider的增删改查方法使用Provider的增删改查方法2. Room单独使用@Database不使用@Entity如何创建表(SupportSQLiteDatabase)不使用@Dao如何管理表(SupportSQLiteDatabase)ContentProvider结合Room保存数据库1. ContentProvider使用理解_contentprovider 保存数据库 表
文章浏览阅读433次。在HTML中,引入CSS的方法主要有行内式、内嵌式、导入式和链接式。行内式:即在标记的style属性中设定CSS样式,这种方式本质上没有体现出CSS的优势,因此不推荐使用。例:Text DemoThis is a line of Text.嵌入式:嵌入式则将对页面中各种元素的设置集中写在和之间,对于单一的网页,这种方法很方便。但是对于一个包含很多页面的网站,如果每个页面都以内嵌方式设置各自的样式,..._webpack html 引入css