4.8 範例

身份證檢查程式

#! /usr/bin/perl

# Copyright 2003 by OLS3 (ols3@www.tnc.edu.tw)
# 檢查身份證號碼的合法性

# 取得身份證字號
chomp($pno = <STDIN>);
	
# 分別取得十個字元
for ($i=1;$i<=10;$i++) {
	$D[$i]=substr($pno,$i-1,1);
}

# 將第一個字元, 轉成大寫
$firstno=uc($D[1]);

# 每一個英文字母都有其代碼
%FNO=(
"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
);

# $x2= 個位數字
$x2=$FNO{$firstno} % 10;

# $x1= 十位數字
$x1=($FNO{$firstno} - $x2) / 10;

$checkno=$x1 + 9*$x2 + 8*$D[2] + 7*$D[3] + 6*$D[4] + 5*$D[5] 
             + 4*$D[6] + 3*$D[7] + 2*$D[8] + $D[9] + $D[10]; 

if ($checkno % 10)	{
	print "身份證字號 $pno 不正確!\n";
} else {
	print "身份證字號 $pno 正確!\n";
}

上面的範例僅供參考,沒有考慮效率,只作為檢查流程說明之用。