Archive for the ‘实用技巧’ tag
身份证校验码规则(程序实现)
概述
18位身份证标准在国家质量技术监督局于1999年7月1日实施的GB11643-1999《公民身份号码》中做了明确规定。
GB11643-1999《公民身份号码》为GB11643-1989《社会保障号码》的修订版,其中指出将原标准名称“社会保障号码”更名为“公民身份号码”,另外GB11643-1999《公民身份号码》从实施之日起代替GB11643-1989。
公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位校验码。其含义如下:
- 地址码:表示编码对象常住户口所在县(市、旗、区)的行政区划代码,按GB/T2260的规定执行。
- 出生日期码:表示编码对象出生的年、月、日,按GB/T7408的规定执行,年、月、日分别用4位、2位、2位数字表示,之间不用分隔符。
- 顺序码:表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数分配给女性。
校验位的计算方式
- 对前17位数字本体码加权求和
公式为:S = Sum(Ai * Wi), i = 0, … , 16
其中Ai表示第i位置上的身份证号码数字值,Wi表示第i位置上的加权因子,其各位对应的值依次为: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 - 以11对计算结果取模
Y = mod(S, 11)
- 根据模的值得到对应的校验码,对应关系为:
Y值: 0 1 2 3 4 5 6 7 8 9 10
校验码: 1 0 X 9 8 7 6 5 4 3 2
javascript编程实现(chrome中测试通过):
function getCheckCode(code){
if(typeof code !== "string")
alert("身份证号需要以字符串格式输入,不是数字。请在输入的身份证号两端加上双引号(\")");
var W = [7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2];
var checkcode = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];
var A = new String(code), S=0;
for(var i=0; i<A.length; i++){S+=(A[i]*W[i])}
console.log('A.length='+A.length+'\nS='+S);
var Y = S%11;
return checkcode[Y];
}
更新ear/jar包内部部分内容
地球人都知道ear项目打包发布很麻烦,有时候就一个字的更改,也得要重新导出(Export)整个项目,耗时又费力。倘若能直接更新指定的那个jsp/class/js/css/png文件,而且只需几秒钟,觉得这个方案很好的有木有?那好,我就把尝试N多次终于成功的方法告诉你,有钱的捧个钱场,没钱的捧个人场!
关键语法:
jar uf xxxx.ear absolutePath/filename
一般步骤:
- 如果没有子路径,那就直接把替换文件拿过来,放在当前路径下,按上面语法执行;
- 如果有子路径,比如META-INF/则先建立这个目录路径。更方便的方式是解压出那个指定的文件,这样就自动生成了子路径。语法如下:
jar xf xxxx.ear absolutePath/filename
然后把替换文件放到相应位置,或者直接在解压出来的文件上编辑,完成后按上面语法执行;
Examples:
单层压缩包:
- 由于采用了新版的log4j,现在需要更新NGBBoss.ear根目录下的log4j.jar:
jar uf NGBBoss.ear log4j.jar
- 更新NGBBoss.ear中META-INF/目录的application.xml文件:
jar uf NGBBoss.ear META-INF/application.xml
注意:外部文件application.xml也得要有一个对应的父目录META-INF/与执行jar命令时的当前路径下。也就是说,当前路径下要有NGBBoss.ear META-INF/ 这两个东东,而application.xml在META-INF/下。
多层压缩包更新:
- 如果要更新ear包内的war包中的某个jsp/jpg/html/css/js怎么办?那就只能麻烦一点:
- 先把war包取出来;
- 再把那个jsp/jpg/html/css/js文件解压出来;
- 修改/替换;
- 按单层压缩包的更新方式把war包更新了;
- 按单层压缩包的更新方式把ear包更新了;
解锁Oracle表
两句话:
- 查询被锁表的相关信息
select se.username, obj.object_name, obj.object_id, lk.session_id, se.serial# from user_objects obj, v$locked_object lk, v$session se where lk.object_id=obj.object_id and lk.session_id=se.sid;
- 解锁
alter system kill session '{sid},{serial#}';
在旧有项目上开发新功能
背景:
公司有一套项目的统一版本,一个由6个子项目组成的ejb项目,子系统分别是:commons, dao, bussiniselogic, ejbFacade, delegate, webapp。如果更改了一个jsp页面还好说,把jsp上传到服务器即可;但如果是更改了Action,那就麻烦了:重新打包、发布、重启服务器。项目大了打包发布就很耗时,如果大家很有时间,还打算利用这段时间喝杯咖啡,聊两句,那就无所谓了。如果很着急,或者急于看到自己的更改结果。那最好另想办法让你的程序编译-打包-发布过程快一点!
实践:
下面的方法经是我在经过实践证明可行的:
- 新建一个动态web项目。
命名为webappNew。在build path(如src/main/java/)下对应建立相应项目的名称(commons/, dao/, bussiniselogic/, webapp/)。更改build path,将以上新建的几个子目录设置为build path。别忘了把该有的项目引用和依赖加入进来!
- 只在这个新项目下工作。
开发过程中,将本该放在子项目中的新代码放在这些对应目录之下,如dao下要新增一个类com.maywide.oss.web.util.mkuser.java, 此代码本该新增在项目dao下,但是现在放在此web项目的dao/目录下。这样的目的是不再对dao项目重新编译打包,发布的时候只对此新项目编译、打包。这样能节约很多时间。
- 重构/集成
项目开发完毕,需要对整个项目重构。有了前面新建的对应项目名称的目录,重构将非常简单。只需要将各个目录下的代码copy到对应项目中去就行了!然后删除在第1步中新建的web项目。
问题:
- 原web项目不参与编译,新页面怎么运行?
原有的web项目中带有登录功能、js库、css库、框架设计、BaseAction、BaseAF等等基础内容。如果新建的项目中是完全干净的,所有代码都是新开发的,那没有了这些支撑新web页面/功能正常运行的基础设施,新的web项目是无法正常运行甚至不能运行的。所以,这里有了一个方案:
- 新建一个J2EE Utility Project,命名为webappU。将原web项目中的build path复制到webappU,并设置相同的build path,包括resource。
- 将webappU包含到webappNew的Java EE module Dependencies中。这样新开发的Action/AF/Bean就可以引用到原有的基础框架。
- 将css/、common/、images/、inc/、js/、WEB-INF/、index.jsp等顶层文件拷贝到webappNew中。其它功能按需添加。
- 如何进行团队协作?
以前我们直接使用svn,但是现在webappNew是要被删除的,如何协作呢?Git是一个不错的选择。尤其对于连接服务器不方便但又需要团队协作的情况下!
VIM查找时需要转义的字符
首先,VIM中在查找时使用正则表达式进行。但是,不能将平常的正则表达式直接搬过来使用。原因是标准正则中有些符号与VIM中的一些固有符号有冲突,这时就需要对这些符号转义,才能表示这个符号表示正则表达式的操作符,否则表示VIM操作符或者字符本意。
对于这些将在VIM Search时需要转义的字符总结如下:
- |
- &
- ()
- +
- =
- ?
- \{n,m} n到m个,按最多匹配
- \{-n,m} n到m个,按最少匹配
- <> 匹配单词边缘
命令行下批处理图片
每次拍完照片之后,因为照片太大无法直接上传到空间里面,需要将照片缩小。这时总是因为工作量太大而无法让人望而生畏。如果使用windows,而且手头又有photoshop,那很好。因为photoshop里面有个批处理功能叫Action,但是没有在windows下,更没有photoshop,有没有简便的方法可以做这种简单重复的事情呢?
答案是肯定的。那就是命令行的”imagemagick”!imagemagick是一组命令,包括convert, identify, mogrify, composite, montage, compare, stream, display, animate, import, conjure.
使用convert命令对原图做缩放处理,并将缩放后的图片放到resized/目录中:
find . -maxdepth 1 -name '*.JPG' -exec convert {} -resize '1024x1024' resized/{} \;
某些网站的图片上传功能要求后缀名小写,这时需要做一次转换。使用如下命令:
for f in *; do mv $f `echo $f | tr '[:upper:]' '[:lower:]'`; done
或者使用如下命令(更简单):
find resized -depth -exec rename 's/(.*)\/([^\/]*)/$1\/\L$2/' {} \;