WebberUI

統一編號輸入

台灣統編 8 碼輸入:即時檢查碼驗證、格式化、對錯動畫回饋。

實作財政部公開的統一編號檢查碼演算法:各位數字依序乘上權數 1,2,1,2,1,2,4,1,乘積取數字和加總,總和能被 5 整除即通過(2023 年 4 月起的現行規範,向下相容舊統編),並處理第 7 碼為 7 的特例。輸入滿 8 碼即時驗證——通過時綠勾脈衝,失敗時整列紅框搖晃並說明原因;貼上含雜訊的字串會自動清洗為純數字。

載入預覽⋯

Playground

即時調整 props、程式碼片段同步更新——直接試出你要的樣子再複製。

<TaxIdInput />

安裝

npx shadcn@latest add https://webberui.com/r/tax-id-input.json

或在 components.json 設定 registries 後,改用 @webberui/tax-id-input 安裝。

安裝依賴後,從 registry JSON(/r/tax-id-input.jsonfiles[0].content)複製 tax-id-input.tsx 原始碼到你的 components/ui/ 目錄:

npm install motion lucide-react clsx tailwind-merge

使用

import { TaxIdInput, validateTaxId } from "@/components/ui/tax-id-input";

<TaxIdInput
  label="統一編號"
  onChange={(value) => console.log(value)}
  onValid={(ok, value) => ok && console.log(`${value} 可開立發票`)}
/>

// 檢核函式可單獨使用(適合表單送出前再驗一次)
validateTaxId("12345675"); // true(演算法測試號碼,非真實公司)
validateTaxId("12345678"); // false

Props

Prop型別預設值說明
valuestring受控值(僅數字,最多 8 碼);不提供時為非受控模式
defaultValuestring""非受控模式的初始值
onChange(value: string) => void值變動時回呼,參數為清洗後的純數字字串
onValid(valid: boolean, value: string) => void輸入滿 8 碼完成驗證時回呼,同一個值只觸發一次
labelstring"統一編號"欄位標籤文字
disabledbooleanfalse停用輸入
namestring透傳給原生 input 的表單欄位名稱
classNamestring透傳到最外層容器

另外具名匯出 validateTaxId(input)sanitizeTaxId(raw)TaxIdStatus 型別,方便在表單層重複使用同一套檢核邏輯。

可及性

  • 實際輸入由單一原生 input 承載(inputMode="numeric"pattern="[0-9]*"),8 個視覺格子僅為展示並以 aria-hidden 隱藏,鍵盤與行動裝置數字鍵盤行為與一般輸入框一致
  • 驗證訊息置於 aria-live="polite" 區域,狀態變化會被螢幕閱讀器朗讀;驗證失敗時同步設定 aria-invalid
  • 使用者系統開啟「減少動態效果」時,停用搖晃、脈衝與游標閃爍動畫,僅保留顏色與文字回饋

On this page