驗證統一編號

a) 共八位:D1 D2 D3 D4 D5 D6 D7 D8

b) 各數字分別乘以 1, 2, 1, 2, 1, 2, 4, 1

  D1*1 => c1    D2*2 => a1b1
  D3*1 => c2    D4*2 => a2b2
  D5*1 => c3    D6*2 => a3b3
  D8*1 => c4    D7*4 => a4b4

c) 公式:Y = a1 + b1 + c1 + a2 + b2 + c2 + a3 + b3 + c3 + a4 + b4 + c4

  若 Y 能被 10 整除則正確。例:04702088

d) D7 為 7 時,若經上述方法不能整除時,則:
  a4 + b4 ==> a5b5,
  Y = a1 + b1 + c1 + a2 + b2 + c2 + a3 + b3 + c3 + a5 + c4
  能被 10 整除仍算正確。例:00651474, 00238778

e) 參考下面範例:

// 檢核統一編號
function CheckBANO(const BANO: String): Boolean;
var
  i: integer;
  c1, c2, c3, c4, a1, a2, a3, a4, b1, b2, b3, b4, a5: Integer;
begin
  Result := False;
  if Length(BANO) <> 8 then
    Exit;

  c1 := StrToIntDef(BANO[1], -1);
  c2 := StrToIntDef(BANO[3], -1);
  c3 := StrToIntDef(BANO[5], -1);
  c4 := StrToIntDef(BANO[8], -1);
  a1 := StrToIntDef(BANO[2], -1) * 2 div 10;
  b1 := StrToIntDef(BANO[2], -1) * 2 mod 10;
  a2 := StrToIntDef(BANO[4], -1) * 2 div 10;
  b2 := StrToIntDef(BANO[4], -1) * 2 mod 10;
  a3 := StrToIntDef(BANO[6], -1) * 2 div 10;
  b3 := StrToIntDef(BANO[6], -1) * 2 mod 10;
  a4 := StrToIntDef(BANO[7], -1) * 4 div 10;
  b4 := StrToIntDef(BANO[7], -1) * 4 mod 10;
  Result := (c1+c2+c3+c4+a1+a2+a3+a4+b1+b2+b3+b4) mod 10 = 0;
  if not Result and (BANO[7] = '7') then
  begin
    a5 := (a4+b4) div 10;
    Result := (a1+b1+c1+a2+b2+c2+a3+b3+c3+a5+c4) mod 10 = 0;
  end;
end;
 

    Source: geocities.com/huanlin_tsai/faq

               ( geocities.com/huanlin_tsai)