2008年3月19日 星期三

truncate table

truncate table TableName

yyyyMMdd / yyyymmdd / HH / hh

yyyyMMdd → 20080319
yyyymmdd → 2008319
HH → 24小時
hh → 12小時


yyyyMMdd / yyyymmdd / HH / hh

2008年3月18日 星期二

什麼是Cluster server

叢集式架構 / Clustering 叢集, 將數台電腦連結成為邏輯上的一台電腦, 目的是可平衡負載 (LOAD BLANCING) 或作為平行處理 (PARALLEL PROCESSING) 來提昇執行效能, 在某一台電腦發生問題時其他電腦能自動接手以達成錯誤容忍 (FAULT TOLERANCE). 圖示由於近年來微處理器及網路相關技術的長足進步,使得採用這些標準配備來建構平行計算平台的 可行性大為提高,且具有價格低廉,元件取得容易,維護容易等優點。國外已有許多單位著手進 行相關的研究,稱之為Clustering technology(叢集技術)。 [解說] 要建構 Scalable (對漸增的負載, 性能降低較慢, 資源較慢達到飽合) & Available (具容錯性) 的大型分散式系統, 理想的結構必需具有對稱性以及某種程度的自主性.  Clustering 就是用來近似 Symmetry & Autonomy 組態的方法. 系統分割為一群半自 主性的 Cluster. 一個 Cluster 由一群機器以及其專用的 Cluster Server 組成, 用到其它 Cluster 資源的機會並不大. 在大部份的時間內, 每個機器的要求都能被 其 Cluster Server 所滿足. Clustering 對 Client 來說就像是一部單一的 Server. 這種方法的成效要看如何配置各個單位以及區域資源. 如果 Cluster 能夠取得相當 的平衡 (Server 能夠滿足所有 Cluster 的要求), 便可視為一模組不斷擴大系統規 模而不容易產生瓶頸.


Server架構成cluster 所以叫做Cluster Server

這個技術如果想試試看 可以去微軟的MSDN下載

跟硬體無關

2008年3月12日 星期三

自動產生編號 DATAGRID

private void dg_Data_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
if(e.Item.ItemIndex!=-1)
{
e.Item.Cells[0].Text=(this.dg_Data.CurrentPageIndex*this.dg_Data.PageSize+e.Item.ItemIndex+1).ToString();
}
}

2008年3月7日 星期五

VB.NET 與 C# 語言轉換器

語言轉換器(VB.NET, C# Language Converter):

Free Code Translation for .NET (C#<->VB.NET)
http://www.carlosag.net/Tools/CodeTranslator/Default.aspx


Convert C# to VB.NET - A free code conversion tool from Developer Fusion
http://labs.developerfusion.co.uk/convert/csharp-to-vb.aspx


Convert VB.NET to C# - A free code conversion tool from Developer Fusion
http://labs.developerfusion.co.uk/convert/vb-to-csharp.aspx

2008年3月6日 星期四

微軟內建 ~ 惡意軟體移除程式

開始>執行>MRT.exe

還不錯用!

NTLDR is missing

NTLDR is missing開機錯誤修復


選擇光碟開機,由XP安裝片進入到修復控制台執行以下三個步驟:
(e代表光碟機,c代表作業系統槽)

1.copy e:\i386\ntldr c:\

2.copy e:\i386\ntdetect.com c:\

3.copy e:\i386\bootfont.bin c:\

此時已經可以進入作業系統。


如需進一步建立Boot.ini開機檔請見以下網頁:

http://support.microsoft.com/default.aspx?scid=kb%3Bzh-tw%3B289022

http://hk.geocities.com/alanhkg88/DOSIndex.html

Windows系統四種神奇的開機方法

方法一:設定定時開機

  主板上有即時時鐘(Real Time Clock,RTC)負責系統的計時,我們可以通過RTC指定開機的時間,就像鬧鐘一樣。不過,由於這項功能很少被人使用,部分雖然提供了此功能的主板(如INTEL原裝主板)其實並不能在指定時間開機,所以用戶在正式使用前最好先進行測試。

  具體操作方式為:

  1、電腦開機之後根據螢幕上的提示資訊按“Del”鍵進入主板BIOS設定畫面,與定時開機有關的設定功能一般放在“Power Management Setup”選項下。

  2、在BIOS中有一項“RTC Alarm Poweron”的選項,應設成“Enabled”(啟用)。之後用戶可以具體設好定時開機的日期、小時、分鐘、秒鐘。

  3、為了保證電腦準確無誤地實現定時自動開機的功能,用戶還要先檢查一下主板BIOS中的系統時間是否與現實時間相同。

  4、最後一步要記得將主板BIOS中的設定修改結果進行保存,即可在預設的時間定時開機。某些主板上還能夠設成每日同一時間從BIOS自動開機,方法是將“RTC Alarm Date”一項改為“Every Day”。

  不過要提示大家一點,如果利用BIOS自動開機的話,用戶的Windows作業系統中只能使用一個帳戶,否則不可能實現自動開機再自動登錄Windows.

  如果有人問你,你的電腦怎麼開機?回答不外乎是:“直接按電腦機箱上的電源開關按鈕不就得了”。這當然是最簡單的方法。不過,其實打開電腦還有許多方法,下面筆者就給大家介紹四種神奇的電腦開機方法。

  方法二:利用鍵盤/滑鼠開機

  如果電腦機箱放置在難以觸及的地方,使用鍵盤/滑鼠開機是一個不錯的方案。但要注意的是此功能只支援以PS/2介面連接的鍵盤和滑鼠,使用USB介面連接則不行。啟用主板BIOS中“Power On By PS/2 Keyboard”的選項,就可以選擇不同的開機熱鍵,如Ctrl+E是最常見的開機熱鍵。

  或者選“Power Key”一項後,可用鍵盤上單獨設計的一個電源鍵開機,但前提是只有部分符合Keyboard 98技術規格的鍵盤才支援此功能。當然,機箱上的電源按鈕仍然能夠使用。至於用滑鼠開機也很簡單,在BIOS中的設定選項與鍵盤開機設定類似,然後只須輕點滑鼠按鈕就能啟動電腦。

  方法三:利用網路喚醒開機

  要使用Wake On LAN (WOL)網路喚醒功能,需要網卡支援,而具備WOL功能的網卡都有一條特殊的信號線連接主板上的WOL介面,負責將開機信號傳送至主板。不過,目前具備WOL介面的主板已經不多,廠商改為在主板內置的網路晶片上提供WOL功能。

  WOL的原理是電腦在開機時或S5休眠模式(Suspend to Disk,休眠到硬碟)下,網卡仍以極低電壓維持基本運作,這時在網路上的其他電腦便可通過軟體傳送一個稱為“Magic Packet”的神奇封包至要喚醒的電腦。網卡接收信號後就會發出開機信號至主板,使主板啟動。由於電腦在喚醒前仍處於開機狀態,因此我們要知道網卡的MAC位址(每張網卡均有自己獨特的MAC位址,軟體以此進行識別)。

  網路喚醒功能的具體使用方法如下:首先在主板BIOS中打開WOL選項。注意部份主板只支援從S5模式中喚醒(Wake On LAN from S5)。

  其次,從網上下載WOL軟體。這個名為“Magic packet”的網路喚醒軟體,其設定和使用方法都很簡單。執行後在其操作介面中只有5個選項。

  其中:網卡的“(MAC Address)(MAC位址)”一欄,用戶可在Windows作業系統的命令行模式下輸入“ipconfig/all”的指令來獲得。另外,“Internet Address”(互聯網位址)一欄是要進行廣播的欄目,在此欄及“Subnet Mask”一欄中輸入“255、255、255、255”則可進行本地廣播(Local Broadcast)。第四欄為“Send Options”,應選擇“Local Subnet”。第五欄“Remote Port Number”則隨意輸入。注意,上述設定只針對本地網路(Local LAN)而言。如要經互聯網進行喚醒則涉及更多的問題,在此不作討論。最後單擊介面下方的“Wake Me UP”按鈕即可實現從網路喚醒電腦。

  方法四:用電視卡開機

  具備自動開機功能的電視卡已經大量面市,將其連接好後,利用電視卡提供的軟體設定開機時間即可。

  電視卡的自動開機方式大致可以分為三種方式:第一種是真正具備自動開機功能的產品,需先將機箱電源線與電視卡連接再轉接出;另一種是利用休眠方式開機的電視卡。其中,第二種方法由於電腦並未真正關機,即仍在消耗電力,所以並不是所有用戶都樂意採用。下面主要介紹第一種自動開機方法的具體操作。

  1、首先,用戶在安裝時要將機箱上電腦開關按鈕的引線接腳與電視卡的“Power Switch”接腳相連接。

  2、之後再將電視卡的另一組“Power Switch”接腳與主板上的電源接腳連接,最後把電視卡裝進主板的PCI擴展槽中,這樣內部連接就完成了。

  3、安裝好硬體後,電視卡的配套軟體(如康博PVR2)也需要進行設定。主要是在“預約錄影設定”功能方面,用戶應勾選“啟用自動開機功能”一項。

  4、如果你電腦中的Windows作業系統超過一個用戶使用的話,還要設為“啟用自動登錄”模式,並輸入用戶名稱和密碼,即可完成整個設定步驟。

讓你的電腦說話

在“執行”中輸入“narrator”,點“確定”,
首先彈出的是一條警告訊息,不予睬,點“確定”略過後便請出本文的程式。如果你的音箱已經打開,
便會聽到讀音,不想聽的話就按一下Ctrl鍵。再按任意鍵試試,你輸入的字母鍵被系統用標準的美國英語讀了出來,
這時一個完全免費的語音鍵盤就誕生在你的XP電腦中。

可以讓你的右下角顯示日期多一個"星期一"

可以讓你的右下角顯示日期多一個"星期一"


到控制台--地區及語言--自訂--日期--(簡短日期式樣)--輸入 yyyy/M/d/dddd
--再到(完整日期式樣)輸入 yyyy'年'M'月'd'日'/dddd --按套用--確定

該記憶體不能...

0X000000該內存該記憶體不能為read或written的解決方案 的解決方法


相信許多人都為「該記憶體不能為read或written」而傷腦筋,大家不妨試用下列命令

重新注冊所有的dll

開始>>執行>. 輸入cmd>> 按「確定」,出現DOS窗口,在命令提示符下輸入

for %1 in (%windir%\system32\*.dll) do regsvr32.exe /s %1

如果怕輸入錯誤的話,可以複製這條指令,然後在命令提示框點擊左上角的c:\,貼上便不會輸入錯了。在飛速滾屏完全靜止?先別著急啟動其他軟件程序,先耐心等一會兒,因為此時dll們還在找位置。 需要一至二分鐘的時間注冊,請耐心完成。

P.S.未經測試...

電腦當了不用重灌

電腦當了不用重灌
操作方式如下:

1.當開機進入Windows之前,按 [F8]
2.選擇 [5. Cmmand prompt only] 項
3.出現 C:\\> 後,輸入 scanreg /restore
4.選擇一個日期檔,注意日期盡量是電腦未死當機前的日期,按下ENTER

P.S. 未測試過...

2008年3月5日 星期三

最大 URL 長度是在 Internet Explorer 2,083 字元

http://support.microsoft.com/kb/q208427/

2008年3月4日 星期二

C# 輸入西洋日期,取出今年,中國年

///
/// 輸入西洋日期,取出今年,中國年
///

/// 西洋日期
/// 取出今年,中國年;例如:2004→093
public String getChinaYear(string WestDate)
{
try
{
string dateStr="";
string yyy="00";

int year=int.Parse(WestDate.Substring(0,4))-1911;
yyy= yyy + year.ToString();

dateStr = yyy.Substring(2);

return dateStr;
}
catch(Exception E)
{
return null;
}
}

C# 取得今天中國日期

///
/// 取得今天中國日期
///

/// 今天中國日期
public String getChinaToday()
{
try
{
DateTime dt = DateTime.Now;
int year = dt.Year - 1911;

return year.ToString() + dt.ToString("/MM/dd", DateTimeFormatInfo.InvariantInfo);
}
catch(Exception E)
{
return null;
}
}

C# 民國年轉西元年 (971202 > 1981-12-02)

public static string getParseDate(string dateStr)
{
try
{
if (dateStr == null dateStr.Equals(""))
return "";

return (int.Parse(dateStr.Substring(0, dateStr.Length -4)) + 1911)+"-"+dateStr.Substring(dateStr.Length - 4, 2)+"-"+dateStr.Substring(dateStr.Length - 2, 2);
}
catch
{
return dateStr;
}
}

日期轉換

GetTheHoursOfDay(): 某日期的 24 小時時刻列表
GetTheFirstDayOfWeek(): 某日期在該星期的第一天 (星期日)
GetTheLastDayOfWeek(): 某日期在該星期的最後一天 (星期六)
GetTheFirstDayOfMonth(): 某日期在該月份的第一天
GetTheLastDayOfMonth(): 取得某日期在該月份的最後一天
GetTheFirstDaysOfWeekInMoth(): 某日期在該月份每周的第一天列表
GetTheFirstDayOfQuarter(): 某日期在該季的第一天
GetTheLastDayOfQuarter(): 某日期在該季的最後一天
GetTheFirstDaysOfMonthInQuarter(): 取得某日期在該季每個月的第一天列表
GetTheFirstDayOfYear(): 某日期在當年的第一天
GetTheLastDayOfYear(): 某日期在當年的最後一天
GetTheFirstDaysOfQuarterInYear(): 某日期於當年每一季的第一天列表


///
/// 取得某日期的 24 小時時刻列表
///

/// 某日期
/// 某日期的 24 小時時刻列表
public static DateTime[] GetTheHoursOfDay(DateTime dt)
{
List dtList = new List();

for (int i = 0; i < 24; i++)
{
dtList.Add(new DateTime(dt.Year, dt.Month, dt.Day, i, 0, 0));
}

return dtList.ToArray();
}

///
/// 取得某日期在該星期的第一天 (星期日)
///

/// 某日期
/// 某日期在該星期的第一天 (星期日)
public static DateTime GetTheFirstDayOfWeek(DateTime dt)
{
return dt.AddDays((int) dt.DayOfWeek*-1).Date;
}

///
/// 取得某日期在該星期的最後一天 (星期六)
///

/// 某日期
/// 某日期在該星期的最後一天 (星期六)
public static DateTime GetTheLastDayOfWeek(DateTime dt)
{
return dt.AddDays(7 + (int) dt.DayOfWeek*-1 - 1).Date;
}

///
/// 取得某日期在該月份的第一天 (1 號)
///

/// 某日期
/// 某日期在該月份的第一天
public static DateTime GetTheFirstDayOfMonth(DateTime dt)
{
return new DateTime(dt.Year, dt.Month, 1);
}

///
/// 取得某日期在該月份的最後一天
///

/// 某日期
/// 某日期在該月份的最後一天
public static DateTime GetTheLastDayOfMonth(DateTime dt)
{
return new DateTime(dt.Year, dt.Month + 1, 1).AddDays(-1);
}

///
/// 取得某日期在該月份每周的第一天列表
///

/// 某日期
/// 某日期在該月份每周的第一天列表
public static DateTime[] GetTheFirstDaysOfWeekInMoth(DateTime dt)
{
List dtList = new List();

DateTime dtTemp = GetTheFirstDayOfWeek(GetTheFirstDayOfMonth(dt)).Date;
DateTime dtEnd = GetTheLastDayOfMonth(dt).Date;

for (int i = 0; i < 6; i++)
{
if (dtTemp.AddDays(i*7) <= dtEnd)
{
dtList.Add(dtTemp.AddDays(i*7));
}
}

return dtList.ToArray();
}

///
/// 取得某日期在該季的第一天
///

/// 某日期
/// 某日期在該季的第一天
public static DateTime GetTheFirstDayOfQuarter(DateTime dt)
{
if (dt >= new DateTime(dt.Year, 1, 1) && dt <= new DateTime(dt.Year, 3, DateTime.DaysInMonth(dt.Year, dt.Month), 23, 59, 59))
{
return new DateTime(dt.Year, 1, 1);
}
else if (dt >= new DateTime(dt.Year, 4, 1) && dt <= new DateTime(dt.Year, 6, DateTime.DaysInMonth(dt.Year, dt.Month), 23, 59, 59))
{
return new DateTime(dt.Year, 4, 1);
}
else if (dt >= new DateTime(dt.Year, 7, 1) && dt <= new DateTime(dt.Year, 9, DateTime.DaysInMonth(dt.Year, dt.Month), 23, 59, 59))
{
return new DateTime(dt.Year, 7, 1);
}
else
{
return new DateTime(dt.Year, 10, 1);
}
}

///
/// 取得某日期在該季的最後一天
///

/// 某日期
/// 某日期在該季的最後一天
public static DateTime GetTheLastDayOfQuarter(DateTime dt)
{
if (dt >= new DateTime(dt.Year, 1, 1) && dt <= new DateTime(dt.Year, 3, DateTime.DaysInMonth(dt.Year, dt.Month), 23, 59, 59))
{
return new DateTime(dt.Year, 3, DateTime.DaysInMonth(dt.Year, dt.Month));
}
else if (dt >= new DateTime(dt.Year, 4, 1) && dt <= new DateTime(dt.Year, 6, DateTime.DaysInMonth(dt.Year, dt.Month), 23, 59, 59))
{
return new DateTime(dt.Year, 6, DateTime.DaysInMonth(dt.Year, dt.Month));
}
else if (dt >= new DateTime(dt.Year, 7, 1) && dt <= new DateTime(dt.Year, 9, DateTime.DaysInMonth(dt.Year, dt.Month), 23, 59, 59))
{
return new DateTime(dt.Year, 9, DateTime.DaysInMonth(dt.Year, dt.Month));
}
else
{
return new DateTime(dt.Year, 12, DateTime.DaysInMonth(dt.Year, dt.Month));
}
}

///
/// 取得某日期在該季每個月的第一天列表
///

/// 某日期
/// 取得某日期在該季每個月的第一天列表
public static DateTime[] GetTheFirstDaysOfMonthInQuarter(DateTime dt)
{
List dtList = new List();

DateTime dtTemp = GetTheFirstDayOfQuarter(dt);
DateTime dtEnd = GetTheLastDayOfQuarter(dt);

for (int i = 0; i < 3; i++)
{
if (new DateTime(dt.Year, dtTemp.AddMonths(i).Month, 1) <= dtEnd)
{
dtList.Add(new DateTime(dt.Year, dtTemp.AddMonths(i).Month, 1));
}
}

return dtList.ToArray();
}

///
/// 取得某日期在當年的第一天
///

/// 某日期
/// 某日期在當年的第一天
public static DateTime GetTheFirstDayOfYear(DateTime dt)
{
return new DateTime(dt.Year, 1, 1);
}

///
/// 取得某日期在當年的最後一天
///

/// 某日期
/// 某日期在當年的最後一天
public static DateTime GetTheLastDayOfYear(DateTime dt)
{
return new DateTime(dt.Year, 12, DateTime.DaysInMonth(dt.Year, 12));
}

///
/// 取得某日期於當年每一季的第一天列表
///

/// 某日期
/// 某日期於當年每一季的第一天列表
public static DateTime[] GetTheFirstDaysOfQuarterInYear(DateTime dt)
{
List dtList = new List();
dtList.Add(new DateTime(dt.Year, 1, 1));
dtList.Add(new DateTime(dt.Year, 4, 1));
dtList.Add(new DateTime(dt.Year, 7, 1));
dtList.Add(new DateTime(dt.Year, 10, 1));

return dtList.ToArray();
}

C# 判斷是否為數字

public static long checkint(string str)
{
try
{
int li_str=Convert.ToInt16(str);
}
catch
{
return -1;
}
return 1;
}

Regular expression

如果您查詢J2SE 1.4之後String的線上API手冊說明,您會發現有matches()、replaceAll()等方法,您所傳入的參數是「正則表示式」(Regular expression)的字串,正則表示式的功能是J2SE 1.4之後加入的新功能。

正則表示式最早是由數學家Stephen Kleene于1956年提出,主要使用在字元字串的格式比對,後來在資訊領域廣為應用,現在已經成為ISO(國際標準組織)的標準之一。

Java在J2SE 1.4之後開始支援正則表示式,您可以在API文件的 java.util.regex.Pattern 類別中找到支援的正則表示式相關資訊。

如果您使用String類別來配置字串物件,您可以使用簡易的方法來使用正則表示式,並應用於字串的比對或取代等動作上,以下先介紹幾個簡單的正則表示式。

例如一些常用的範圍,我們可以使用預先定義的字元類別:
. 符合任一字元
\d 等於 [0-9] 數字
\D 等於 [^0-9] 非數字
\s 等於 [ \t\n\x0B\f\r] 空白字元
\S 等於 [^ \t\n\x0B\f\r] 非空白字元
\w 等於 [a-zA-Z_0-9] 數字或是英文字
\W 等於 [^a-zA-Z_0-9] 非數字與英文字


. 符合任一字元。例如有一字串abcdebcadxbc,使用.bc來比對的話,符合的子字串有abc、ebc、xbc三個;如果使用..cd,則符合的子字串只有bcd。

以上的例子來根據字元比對,您也可以使用「字元類」(Character class)來比較一組字元範圍,例如:
[abc] a、b或c
[^abc] 非a、b、c的其它字元
[a-zA-Z] a到z或A到Z(範圍)
[a-d[m-p]] a到d或m到p(聯集)
[a-z&&[def]] d、e或f(交集)
[a-z&&[^bc]] a到z,除了b與c之外(減集)
[a-z&&[^m-p]] a到z且沒有m到p(a-lq-z)(減集)










一次只指定一個字元不過癮,也可以用Greedy quantifiers來指定字元可能出現的次數:
X? X出現一次或完全沒有
X* X出現零次或多次
X+ X出現一次或多次
X{n} X出現n次
X{n,} X出現至少n次
X{n,m} X出現至少n次,但不超過m次


另外還有Reluctant quantifiers、Possessive quantifiers等的指定,您可以自行參考 java.util.regex.Pattern 類別中的說明。

在String類別中,matches()方法可以讓您驗證字串是否符合指定的正規表示式,這通常用於驗證使用者輸入的字串資料是否正確,例如電話號碼格式;replaceAll()方法可以將符合正規表示式的子字串置換為指定的字串;split()方法可以讓您依指定的正規表示式,將符合的子字串分離出來,並以字串陣列傳回。


下面這個程式示範幾個正則表示式的應用:
• UseRegularExpression.java
import java.util.Scanner;

public class UseRegularExpression {
public static void main(String args[]) {
Scanner scanner = new Scanner(System.in);

String str = "abcdefgabcabc";
System.out.println(str.replaceAll(".bc", "###"));

System.out.print("輸入手機號碼: ");
str = scanner.next();

// 簡單格式驗證
if(str.matches("[0-9]{4}-[0-9]{6}"))
System.out.println("格式正確");
else
System.out.println("格式錯誤");

System.out.print("輸入href標籤: ");
// Scanner的next()方法是以空白為區隔
// 我們的輸入有空白,所以要執行兩次
str = scanner.next() + " " + scanner.next();

// 驗證href標籤
if(str.matches(""))
System.out.println("格式正確");
else
System.out.println("格式錯誤");

System.out.print("輸入電子郵件: ");
str = scanner.next();

// 驗證電子郵件格式
if(str.matches(
"^[_a-z0-9-]+([.][_a-z0-9-]+)*@[a-z0-9-]+([.][a-z0-9-]+)*$"))
System.out.println("格式正確");
else
System.out.println("格式錯誤");
}
}

公司統一編號驗證

/*
* 項 目 計 算 方 法 說 明
統一編號 0 4 5 9 5 2 5 7  
邏輯乘數 1 2 1 2 1 2 4 1 兩數上下對應相乘
  乘 積 0 8 5 1 5 4 2 7
    0 0 0 8 0 0 0 0 乘積直寫並上下相加
--------------------------------------------
乘積之和 0 8 5 9 5 4 2 7 將相加之和再相加
  0+8+5+9+5+4+2+7=40   正確!
最後結果, 40 能被 10 整除, 故 04595257 符合邏輯。

*若第七位數字為 7 時
統一編號 1 0 4 5 8 5 7 5 倒數號二位為 7
邏輯乘數 1 2 1 2 1 2 4 1 兩數上下對應相乘
  乘 積 1 0 4 1 8 1 2 5
    0 0 0 0 0 0 8 0 乘積直寫並上下相加
---------------------------------------------
乘積之和 1 0 4 1 8 1 1 5
0 再相加時最後第二位數取 0 或 1 均可。
  1+0+4+1+8+1+1+5=21  
  1+0+4+1+8+1+0+5=20  正確!
最後結果中, 20 能被 10 整除, 故 10458575 符合邏輯。




public static bool checkCompanyID(string sCompanyID)
{
try
{
//傳入公司統編長度不等於8就return
if(sCompanyID.Length != 8)
return false;

int aSum = 0;

//公司統編邏輯乘數( 1, 2, 1, 2, 1, 2, 4, 1 )
int[] LogicCompanyID = {1, 2, 1, 2, 1, 2, 4, 1};

for(int i = 0 ; i < LogicCompanyID.Length ; i++)
{
//公司統編與邏輯乘數相乘
int aMultiply = Convert.ToInt32(sCompanyID.Substring(i,1)) * LogicCompanyID[i];

//將相乘的結果, 取十位數及個位數相加
int aAddition = ((aMultiply / 10) + (aMultiply % 10));

//如果公司統編的第 7 位是 7 時, 會造成相加結果為 10 的特殊情況, 所以直接以 0 代替進行加總
aSum += (aAddition == 10)?0:aAddition;

}
//判斷總和的餘數, 假使為 0 公司統編正確回傳 true, 其它值則反之.
return (aSum % 10 == 0);
}
catch
{
return false;
}


例外狀況: 70664079