“学习”目录存档

[PHP]韩国身份证号码算法

2008年01月28日,星期一

在网上找的资料, 但是国内没一个说这个的…-__-

所以, 注释我就给写的很详细…

其中, 最重要的就是 _createValidCode 这个私有方法.
他负责生成最后的那一位验证数字…
也就是说, 整个类, 这么多的代码, 就是为了那一个数字…

另外, 我打包的那个jQuery Lightbox插件WordpressChina.ORG收录了. 很好很强大. 心里蛮开心, 嘿嘿…

/**
* 类名: krIdCreator
* 描述: 韩国身份证编号生成器
* 功能: 生成标准的、可以通过算法校验的韩国人身份证编号
********************************************
* 使用方法:
* void krIdCreator([int $sex_given[, int $rand_given[, int $year_given[, int $month_given[, int $date_given]]]]])
* 目的: 实例化韩国身份证生成器类
* 参数说明:
* $sex_given (可选) 整数或字符串
* 指定所生成的身份证号的 性别部分
* $rand_given (可选) 整数或字符串
* 指定所生成的身份证号的 随机数部分
* $year_given (可选) 整数或字符串
* 制定所生成的身份证号的 年份部分
* $month_given (可选) 整数或字符串
* 制定所生成的身份证号的 月份部分
* $date_given (可选) 整数或字符串
* 制定所生成的身份证号的 日期部分
*
*
* string krIdCreator->krId()
* 目的: 生成可以通过算法校验的韩国身份证编号
* 参数说明:
* 无
********************************************
* 使用举例 - 1 :
* //实例化生成器这个类:
* $krIdCreator = new krIdCreator();
* //使用echo输出生成的身份证号:
* echo $krIdCreator->krId();
*
* 使用举例 - 2 :
* //我想要生于98年的韩国男孩子的身份证编号:
* $krIdCreator = new krIdCreator(’1′, ”, ‘98′);
* //使用echo输出生成的身份证号:
* echo $krIdCreator->krId();
*/
class krIdCreator{
private $_year, $_month, $_date, $_sex, $_rand;
private $_addons = array( 2, 3, 4, 5, 6, 7, 8, 9, 2, 3, 4, 5 );
private $_maxDays = array( 1 => 31, 2 => 28, 3 => 31, 4 => 30, 5 => 31, 6 => 30, 7 => 31, 8 => 31, 9 => 30, 10 => 31, 11 => 30, 12 => 31 );

/********************************************************************
* 构造函数, 由此类生成实例时, 首先执行这个函数中的程序
*
* @param 整数(可选) $sex_given
* @param 整数(可选) $rand_given
* @param 整数(可选) $year_given
* @param 整数(可选) $month_given
* @param 整数(可选) $date_given
* @return 类 krIdCreator 的实例
********************************************************************/
function krIdCreator( $sex_given = null, $rand_given = null, $year_given = null, $month_given = null, $date_given = null ){
/**
* 校验给定的, 用于身份证性别部分的信息
* 1 = 男性; 2 = 女性;
* 如果没有指出, 则随机从1,2中选出一个
* 如果已经指出, 则取其加1的结果除以2的余数, 之后对这个余数加1
*/
if ( $sex_given == null){
$this->_sex = mt_rand(1, 2);
}
else{
$this->_sex = ( ((int)$sex_given + 1) % 2 ) + 1;
}
/**
* 校验给定的, 用于身份证的5位随机数部分
* 如果没有指出, 则自动生成一个5位的随机数
* 如果已经指出, 则对其进行5位取舍
* 也就是, 不足5位的在前面用数字0补齐.
*/
if ( $rand_given == null){
$this->_rand = sprintf(’%05.05s’, mt_rand( 0, 99999));
}
else{
$this->_rand = sprintf(’%05.05s’, (int)$rand_given);
}
/**
* 校验给定的年份
* 如果没有指出, 则自动生成一个2位的随机数
* 如果已经指出, 则对其进行2位取舍
* 也就是, 不足2位的在前面用数字0补齐
*/
if ( $year_given == null){
$this->_year = sprintf(’%02.02s’, mt_rand( 1, 99));
}
else{
$this->_year = sprintf(’%02.02s’, (int)$year_given);
}
/**
* 校验给定的月份
* 如果没有指出, 则自动生成一个2位的随机数
* 如果已经指出, 则对其进行2位取舍
* 也就是, 不足2位的在前面用数字0补齐
*/
if ( $month_given == null || $month_given > 12 ){
$this->_month = sprintf(’%02.02s’, mt_rand( 1, 12));
}
else{
$this->_month = sprintf(’%02.02s’, (int)$month_given);
}
/**
* 校验给定的日期
* 如果没有指出, 则自动随机生成一个2位的符合常识的日期
* 如果已经指出, 则对其进行2位取舍
* 如果已经给定的日期不符合常识性规则, 则自动生成一个随机数
* 生成当月最大日期函数: _createDate()
*/
if ( $date_given == null || $date_given > $this->_createDate() ){
$this->_date = sprintf(’%02.02s’, mt_rand( 1, $this->_createDate()));
}
else{
$this->_date = sprintf(’%02.02s’, (int)$date_given);
}
}

/********************************************************************
* 生成”yymmdd-sxxxxxv”格式, 并且可以通过算法校验的韩国身份证编号
*
* @return 韩国身份证号
********************************************************************/
function krId(){
$perNo = $this->_year . $this->_month . $this->_date . ‘-’ . $this->_sex . $this->_rand . $this->_createValidCode();
return $perNo;
}

/********************************************************************
* 私有方法
* 用来根据现有的生日性别及随机数, 生成身份证末位的验证数字
*
* @return 验证数字
********************************************************************/
private function _createValidCode(){
$temp = $total = ”;
$mixNumber = $this->_year . $this->_month . $this->_date . $this->_sex . $this->_rand;
for($i=0 ; $i < 12; $i++){
$temp = (int)$mixNumber{$i} * (int)$this->_addons[$i] ;
$total += $temp;
}
$ValidCode = (int)( 11 - ( $total % 11 ) ) % 10;
return $ValidCode;
}

/********************************************************************
* 私有方法
* 使用在用来随机生成生日的地方
* 保证出生日期的常识性, 不会出现出生于 1995年2月31日的情况
*
* @return 当前月份的最大日期
********************************************************************/
private function _createDate(){
$maxDays = $this->_maxDays[(int)$this->_month];
if ( (($this->_year % 4) == 0) && ((int)$this->_month == 2) ){
$maxDays += 1;
}
return $maxDays;
}
}
?>

[WordPress]主题制作中…

2007年11月30日,星期五

虽然还没做完, 但是已经迫不及待的放出来了…

哈哈, 第一次使用CSS做东西…爽!!

[Update]2007.12.01
.post做的差不多了…
如图:
theme-2.jpg

顺便遇到了个问题:
等待达人来解决ing…

[CSS]文字+DIV的环绕

2007年11月29日,星期四

这么简单的效果, 我弄了好长时间…- -

没办法, 对CSS真的不是很熟…

贴代码:

牛仔很忙
呜啦啦啦火车笛随着奔腾的马蹄小妹妹吹着口琴夕阳下美了剪影我用子弹写日记介绍完了风景接下来换介绍我自己我虽然是个牛仔在酒吧只点牛奶为什么不喝啤酒因为啤酒伤身体很多人不长眼睛嚣张都靠武器
赤手空拳就缩成蚂蚁不用麻烦了不用麻烦了不用麻烦不用麻烦了不用麻烦了你们一起上我在赶时间每天决斗观众都累了英雄也累了不用麻烦了不用麻烦了副歌不长你们有几个一起上好了正义呼唤我美女需要我牛仔很忙的

主要就是第2行中的那个”float:value”了…

效果(为了增强效果, 浮动的div增加了宽高属性):

牛仔很忙
呜啦啦啦火车笛随着奔腾的马蹄小妹妹吹着口琴夕阳下美了剪影我用子弹写日记介绍完了风景接下来换介绍我自己我虽然是个牛仔在酒吧只点牛奶为什么不喝啤酒因为啤酒伤身体很多人不长眼睛嚣张都靠武器
赤手空拳就缩成蚂蚁不用麻烦了不用麻烦了不用麻烦不用麻烦了不用麻烦了你们一起上我在赶时间每天决斗观众都累了英雄也累了不用麻烦了不用麻烦了副歌不长你们有几个一起上好了正义呼唤我美女需要我牛仔很忙的

常见文件类型的Content-type列表

2007年11月1日,星期四

下面这个是方便PHP使用的:
来自于:http://www.fleaphp.org.cn/bbs/viewthread.php?tid=398
(全文…)

[PHP]面向对象(OO)…

2007年09月24日,星期一

今天第一次接触PHP的面向对象…

并且尝试性的写一个类…

写完之后发现类型错误…

日…

睡觉先, 明天继续写…

[coolcode lang="php"] class chara{
var $chara;
var $forbidden = array( ' ', '~', '`', '!', '@', '#',
'$', '%', '^', '&', '*', '(',
')', '-', '_', '=', '+', '[',
'{', ']', '}', '\\', '|', ';',
':', '\'', '"', ',', '<', '.',
'>‘, ‘/’, ‘?’, ‘ ‘, ‘\n’,
‘\r’, ‘\l’);
function __construct($post){
return $_POST[$post];
}
function __set($name, $value){
if ($name == ‘chara’){
$this->chara = str_replace($forbidden, ”, $value);
$this->chara = mb_strimwidth($this->chara, 0, 18, ”);
}
}
function __get($name){
return $this->$name;
}
}
?>[/coolcode]

[AJAX]使用POST提交, 心得.

2007年09月20日,星期四

刚从QQ飞车出来, 差点吐…

引擎太”逼真”了!!!
比赛时, 其他选手对你的影响太大了…

而且人物角色除了男就是女.
这块不像Nexon的카트라이더, 角色很多, 而且还有特殊角色(宝宝啊, 海盗啊…)有特殊功能的, 可以卖钱…
不过相信以后会有的…
而且, 可能是因为别的可谋利的道具太少的缘故, 车胎漂移时滑过的印记, 也需要买…-_-!

再就是人物形象, 因为不能过于模仿Nexon的(脑袋不能太大, 不能太Cute…), 所以人物模型, 也很”逼真”, 逼真到跟赛道护栏差不多一边高…

太多不足了, 游戏开始前倒计时的段落打字居然不支持中文.
比赛完成后, 一直到等待颁奖, 居然不能打字聊天.

太多了, 不想说了…

新手指导的声音蛮甜…
[audio:http://www.mjbox.com/u/EiV/tutorial_1.mp3]

还有就是sounds目录下, 用作游戏资源的音频文件, 居然没打包.所以才能看到…

um…游戏说完, 下面说重点…

刚研究了一下使用ajax的post提交. 由于之前都用escape()处理, get提交. 导致php服务器端必须要有一个unescape()的函数, 这是很麻烦的东西, 会造成丢符号之类…
所以想用POST提交, 可以不用escape.保证提交数据的原汁原味~.

经过了一个多小时的研究, 终于明白了….T-T

下面是.js文件(全部).
[coolcode lang="javascript"]
/* Create a new XMLHttpRequest object to talk to the Web server */
var xmlHttp = false;
/*@cc_on @*/
/*@if (@_jscript_version >= 5)
try {
xmlHttp = new ActiveXObject(”Msxml2.XMLHTTP”);
} catch (e) {
try {
xmlHttp = new ActiveXObject(”Microsoft.XMLHTTP”);
} catch (e2) {
xmlHttp = false;
}
}
@end @*/
if (!xmlHttp && typeof XMLHttpRequest != ‘undefined’) {
xmlHttp = new XMLHttpRequest();
}

//用一个函数, 把所有提交的&替换成%26.
//因为如果存在多个提交的变量, 需要用&进行分隔.
function str_replace(str_text){
var text = str_text ;
text = text.replace(/&/g, ‘%26′);
return text;
}

function run() {
var a_value = ‘a=’+str_replace(document.getElementById(”a”).value);
var b_value = ‘b=’+str_replace(document.getElementById(”b”).value);
var url = “./post.php”;
xmlHttp.open(”POST”, url, true);
xmlHttp.setRequestHeader(”Content-Type”, “application/x-www-form-urlencoded”);
xmlHttp.onreadystatechange = updatePage;
//send里, 用&来组织提交的变量…
xmlHttp.send(a_value+’&'+b_value);
}

function updatePage() {
if (xmlHttp.readyState == 4) {
var response = xmlHttp.responseText;
document.getElementById(”d”).innerHTML = ““+response+”“;
}
}[/coolcode]

PHP端:
[coolcode lang="php"]
echo $_POST["a"];
?>

echo $_POST["b"];
?>
[/coolcode]

立竿见影, 马上就可以看到效果了.

[MySQL]关于查询…

2007年09月10日,星期一

到现在还不知道怎么写搜索引擎的查询…

咱也不会分词,
所以, 打算这样做:
1.先完全等于提交的词;
2.替换空格为%, 用like查;
3.替换所有符号为空, 字符用[]括起来, 再用%夹上, 然后用like查.这句, 在SQL里, 需要用什么XXXREG, 而不是like…

这样的话, 虽然麻烦, 但是查询的面会很广…

到时候就要考虑数据库的性能了…

Dreamhost谁来给我做一下优化啊啊啊啊啊…- -

[PHP]跟R2Beat有关系的, 两个有用的小东西.

2007年08月29日,星期三

1.以前可能发过. 不过还是再发一次吧.
Ver.RSS

这是一个可以用来更新R2Beat跟S4League的RSS源…
他不怎么太喜欢比较低的权限…因为”更新”绝大多数韩国游戏, 都需要操作注册表.
人格担保没有读取或者写除了相关游戏外的其他信息.
而且好像对权限要求比较苛刻的电脑, 不好使…-_-

2.刚写好的, 还在冒热气…
R2Updates

这个, 可以用来查看R2Beat官方新闻里的”update”消息.
这样就可以避免每次去查看更新新闻的时候, 还要费劲去找代理…

嫌麻烦, 所以做了这么个东西…
um…睡觉…

[한국어]标准韩国语第一册上的词…

2007年08月3日,星期五

韩音论坛上挖来的…
有事儿没事儿回来看一眼…
超级多, 小猫勿进!!!

아이    名    小孩
아우    名    弟弟
어이    副    怎么
오이    名    黄瓜
우    副    峰拥貌
이    名    牙齿
바보    名    傻瓜, 傻子
비    名    雨
삐삐    名    寻呼机
아빠    名    (小孩语)爸爸
파    名    葱
피    名    血
무    名    萝卜
모    名    苗
우리    名    我们
엄마    名    母亲, 妈妈
어머니    名    母亲(泛指很亲切的)
(全文…)

更新了一些东西…

2007年07月30日,星期一

RT, 把很久很久很久很久…之前, QQR2更新的四首歌曲(编号89757, 波间带, 样子, Sweet Sun Shine)的图片,mp3,歌曲信息更新了上来…太懒了, 一直没弄..哈哈..

然后就是把CoolPlayer,PagePost的几个.js文件更新了一下…

因为在我这里, 那两个WP插件会有BUG, :( 当CP跟PP一起用的时候, 标题栏会变成类似”#pp3″这样的内容…

方法是打开相关.js文件, 修改相关的函数.
函数头写:
var title = document.title ;
函数尾写:
document.title = title ;
就是这样…

然后把CoolPlayer的rpc服务器更新到了自己的服务器上, 这样就可以更加方便的防盗链啦.

另外最近看看又没时间, 打算写一个我自个儿用的WordPress主题..嗯…