在河里抓鱼的熊

抓鱼杂谈

Archive for the ‘杂谈’ Category

身份证校验码规则(程序实现)

without comments

概述

18位身份证标准在国家质量技术监督局于1999年7月1日实施的GB11643-1999《公民身份号码》中做了明确规定。

GB11643-1999《公民身份号码》为GB11643-1989《社会保障号码》的修订版,其中指出将原标准名称“社会保障号码”更名为“公民身份号码”,另外GB11643-1999《公民身份号码》从实施之日起代替GB11643-1989。

公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位校验码。其含义如下:

  1. 地址码:表示编码对象常住户口所在县(市、旗、区)的行政区划代码,按GB/T2260的规定执行。
  2. 出生日期码:表示编码对象出生的年、月、日,按GB/T7408的规定执行,年、月、日分别用4位、2位、2位数字表示,之间不用分隔符。
  3. 顺序码:表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数分配给女性。

校验位的计算方式

  1. 对前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

  2. 以11对计算结果取模

    Y = mod(S, 11)

  3. 根据模的值得到对应的校验码,对应关系为:

    Y值: 0 1 2 3 4 5 6 7 8 9 10
    校验码: 1 0 X 9 8 7 6 5 4 3 2

  4. 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];
    }
    

Written by qianxiong

December 17th, 2011 at 9:24 pm

使用动态规划法实现斐波那契数列计算

without comments

动态规划法概述

动态规划是一种在数学和计算机科学中使用的,用于求解包含重叠子问题的最优化问题的方法。其基本思想是,将原问题分解为相似的子问题,在求解的过程中通过子问题的解求出原问题的解。动态规划的思想是多种算法的基础,被广泛应用于计算机科学和工程领域。比较著名的应用实例有:求解最短路径问题,背包问题,项目管理,网络流优化等。

动态规划在查找有很多重叠子问题的情况的最优解时有效。它将问题重新组合成子问题。为了避免多次解决这些子问题,它们的结果都逐渐被计算并被保存,从简单的问题直到整个问题都被解决。因此,动态规划保存递归时的结果,因而不会在解决同样的问题时花费时间。
动态规划只能应用于有最优子结构的问题。最优子结构的意思是局部最优解能决定全局最优解(对有些问题这个要求并不能完全满足,故有时需要引入一定的近似)。简单地说,问题能够分解成子问题来解决。

斐波那契数列计算

一般方法

javascript实现:

function fib(n){
	if(n == 1 || n == 0)
		return 1;
	return fib(n-1)+fib(n-2)
}

当计算fib(5)时
fib(5)
fib(4) + fib(3)
(fib(3) + fib(2)) + (fib(2) + fib(1))
((fib(2) + fib(1)) + (fib(1) + fib(0))) + ((fib(1) + fib(0)) + fib(1))
(((fib(1) + fib(0)) + fib(1)) + (fib(1) + fib(0))) + ((fib(1) + fib(0)) + fib(1))
这种方法的问题在于对相同的子问题进行了多次重复计算,其计算量呈指数上升。如果能将计算过的结果存储起来,就避免了大规模的重复计算。

使用动态规划

原理:

将计算过的值存储起来,不用每次都递归计算得出。这样将极大的提高计算效率

javascript实现:

var fibmap = {0:1, 1:1};
function fib2(n){
	if(typeof fibmap[n] === "undefined"){
		fibmap[n] = fib2(n-2) + fib2(n-1);
	return fibmap[n];
}

Written by qianxiong

December 17th, 2011 at 5:04 pm

更新ear/jar包内部部分内容

without comments

地球人都知道ear项目打包发布很麻烦,有时候就一个字的更改,也得要重新导出(Export)整个项目,耗时又费力。倘若能直接更新指定的那个jsp/class/js/css/png文件,而且只需几秒钟,觉得这个方案很好的有木有?那好,我就把尝试N多次终于成功的方法告诉你,有钱的捧个钱场,没钱的捧个人场!

关键语法:

jar uf xxxx.ear absolutePath/filename

一般步骤:

  1. 如果没有子路径,那就直接把替换文件拿过来,放在当前路径下,按上面语法执行;
  2. 如果有子路径,比如META-INF/则先建立这个目录路径。更方便的方式是解压出那个指定的文件,这样就自动生成了子路径。语法如下:
    jar xf xxxx.ear absolutePath/filename

    然后把替换文件放到相应位置,或者直接在解压出来的文件上编辑,完成后按上面语法执行;

Examples:

单层压缩包:

  1. 由于采用了新版的log4j,现在需要更新NGBBoss.ear根目录下的log4j.jar:
    jar uf NGBBoss.ear log4j.jar
  2. 更新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/下。

多层压缩包更新:

  1. 如果要更新ear包内的war包中的某个jsp/jpg/html/css/js怎么办?那就只能麻烦一点:
  2. 先把war包取出来;
  3. 再把那个jsp/jpg/html/css/js文件解压出来;
  4. 修改/替换;
  5. 按单层压缩包的更新方式把war包更新了;
  6. 按单层压缩包的更新方式把ear包更新了;

Written by qianxiong

August 15th, 2011 at 12:44 pm

愚人节kernel.org之怪状

with one comment

今天在LinuxToy上看到kernel.org主页完全翻转的怪状,发生这一情景的时间是4月1号,愚人节上。我看大部分人的意见都不太靠谱,因此也陈述了自己的意见,我不赞同其中的截图说和css说,见41楼。重复一下我的陈述:

33楼原文:还有数学符号。⊥ 这个就是。ǝ 是国际音标。ƃ 是斯拉夫字母。页面是 utf-8 的。

赞成33楼xiaq的说法。现在似乎还没有让元素倒过来的css功能吧!即使有,下面两点也讲不通:

  1. 倒过来之后的文字格式应该保持住才对!比如”Security”倒过来之后“ecurit”的底线应该与”S”的底线保持一致,而那个页面却是”ecurit”的顶线与”S”的顶线一致。
  2. 字型应该不变。但是如”A”倒过来之后变成了”∀”,”e”倒过来后变成了”ǝ”,”g”倒过来成了”ƃ”。字型上发生了很大的变化,这说明更本不是同一个字。 所以,这应该是将所有字母顺序用js反过来,然后找了对应相似的字母替换之后得到的。

Written by qianxiong

April 3rd, 2010 at 12:08 pm

Posted in 技术,杂谈

Tagged with

网站偶尔被重置了

with one comment

刚才打开我现在的这个网站想记点东西,结果居然返回RESET。我心里大呼“完了“!可是我的页面内容就这么点,怎么会有敏感词呢。于是我一篇一篇的点开试,看看到底是访问哪一篇内容时会被重置。结果又没有出现RESET的情况了!再重新打开首页,也没有。好奇怪!难道GWF知道我在试探他?

反正GWF是盯上我了,TMD,真是无恶不作!

Written by qianxiong

April 1st, 2010 at 11:22 am

Posted in 杂谈

Tagged with ,