2008年10月14日 星期二

沒有轉址軟體時,使用zend framework的解法

http://akrabat.com/2008/06/03/zend-framework-urls-without-mod_rewrite/

2008年10月10日 星期五

mssql的分頁

http://blog.blueshop.com.tw/blackncc/archive/2007/01/06/49123.aspx

2008年10月9日 星期四

iis上支援轉址的免費軟體

http://cheeso.members.winisp.net/IIRF.aspx

2008年10月8日 星期三

連接mssql

http://www.zxbc.cn/html/20070506/13033.html

Zend_Framework 1.6的版本的protected $_pdoType已改為mssql

http://mlblog.osdir.com/php.zend.framework.general/2006-12/index.shtml

PDO, MSSQL and FreeTDS

Date: December 12, 2006
From: Todd Wolaver

Hi,


I'm using FreeTDS under Linux to access MSSQL databases, which won' t work with the framework since the PDO driver is dblib not mssql.

$db = Zend_Db::factory('pdo_mssql', $params);

will return:
"The mssql driver is not currently installed"

This is set in the Mssql.php PDO adapter (Zend_Db_Adapter_Pdo_Mssql):
43: protected $_pdoType = 'mssql';


If this is changed to dblib then it works. What would be the best way of implementing the dblib driver without changing the core code of the framework?

Thanks
Todd Wolaver


Zend_Framework 1.6的版本的protected $_pdoType已改為mssql

2008年9月26日 星期五

jQuery的身份證驗證plugin

/**
* 驗證身份證字號是否正確的jquery plugin
* 用法:jQuery('身份證字號的id').idCheck();
* 傳回值:
* 合法---傳回true
* 非法---傳回false
* 作者:羅仁治
* 版本:1.0
* 版權:隨你使用,但須保留這段說明文字。
*/
jQuery.fn.idCheck = function(){
var real_id = this.val();
real_id = real_id.toUpperCase();


var pattern = /^[A-Z]{1}[0-9]{9}$/;
if (!pattern.test(real_id)) {
return false;
}

if (check(real_id)) {
return true;
}
else {
return false;
}


function check(real_id){
var first = real_id.substr(0, 1);
switch (first) {
case 'A':
first = '10';
break;
case 'B':
first = '11';
break;
case 'C':
first = '12';
break;
case 'D':
first = '13';
break;
case 'E':
first = '14';
break;
case 'F':
first = '15';
break;
case 'G':
first = '16';
break;
case 'H':
first = '17';
break;
case 'I':
first = '34';
break;
case 'J':
first = '18';
break;
case 'K':
first = '19';
break;
case 'L':
first = '20';
break;
case 'M':
first = '21';
break;
case 'N':
first = '22';
break;
case 'O':
first = '35';
break;
case 'P':
first = '23';
break;
case 'Q':
first = '24';
break;
case 'R':
first = '25';
break;
case 'S':
first = '26';
break;
case 'T':
first = '27';
break;
case 'U':
first = '28';
break;
case 'V':
first = '29';
break;
case 'W':
first = '32';
break;
case 'X':
first = '30';
break;
case 'Y':
first = '31';
break;
case 'Z':
first = '33';
break;
}

var value = first.concat(real_id.substr(1, 8));

var sum = parseInt(value.substr(0, 1));

for (var i = 1; i <= 9; i++) {
sum = sum + parseInt(value.substr(i, 1)) * (10 - i);
}

single = 10 - (sum % 10);

if (parseInt(real_id.substr(9, 1)) == single) {
return true;
}
else {
return false;
}
}
};

2008年9月25日 星期四

身份證字號的validator

下面程式是參考
http://zh.wikipedia.org/wiki/%E4%B8%AD%E8%8F%AF%E6%B0%91%E5%9C%8B%E5%9C%8B%E6%B0%91%E8%BA%AB%E5%88%86%E8%AD%89


這篇文章的身份證字號檢查公式,轉換成Zend framework的validator,進行身份證號碼的驗證。

有了公式之後要進行驗證就比較容易,不用看程式碼去倒推公式,如果沒有公式,光看程式碼,看個老半天,也看不出個所以然來,還要去適應各種程式碼的寫法,太累了,這個公式真是造福大家,直接將公式轉換成Zend Framework的程式碼,就容易多了。

require_once('Zend/Validate/Abstract.php');

class App_Validate_IdCheck extends Zend_Validate_Abstract{
const SIZE='size';
const FORMAT='format';
const CHECK='check';

protected $_messageTemplates=array(
self::SIZE=>"'%value%' 身份證字串長度不符合。",
self::FORMAT=>"'%value%' 的第一個字元必須是英文字母,其他必須是數字。",
self::CHECK=>"'%value%' 是非法的身份證字號。"
);

public function isValid($value){
$this->_setValue($value);
if(strlen($value) !=10){
$this->_error(self::SIZE);
return false;
}

$value=strtoupper($value);
if(!ereg("[A-Z]{1}[0-9]{9}",$value)){
$this->_error(self::FORMAT);
return false;
}

if($this->check($value)){
return true;
}
else{
$this->_error(self::CHECK);
return false;
}
}

private function check($value){
$first=array('A'=>10,'B'=>11,'C'=>12,'D'=>13,'E'=>14,
'F'=>15,'G'=>16,'H'=>17,'I'=>34,'J'=>18,
'K'=>19,'L'=>20,'M'=>21,'N'=>22,'O'=>35,
'P'=>23,'Q'=>24,'R'=>25,'S'=>26,'T'=>27,
'U'=>28,'V'=>29,'W'=>32,'X'=>30,'Y'=>31,
'Z'=>33);
/**
* convert the first alpha character to two digits
* and combines to the rest digits
*/
$value=$first[$value[0]].substr($value,1);

$sum=(int)$value[0];
for($i=1;$i<=9;$i++){
$sum+=$value[$i]*(10-$i);
}

/**
* get the single-digit of 10-$sum
*/
$single=10 - ($sum % 10);

if($single == $value[10]){
return true;
}
else{
return false;
}
}
}