DK77 目前的打卡方式是 GPS 定位打卡:
員工用手機登入 → 按下打卡 → 系統記錄時間、GPS 座標、IP 與裝置資訊,再與公司設定的工作地點半徑比對。
這個機制記錄的是:
「這個帳號的人按了打卡」+「裝置自行回報的位置」。
問題就出在「裝置自行回報」這幾個字。
GPS 打卡的天花板
GPS 座標是員工的裝置回報給系統的:
- 定位可以關閉,也有工具可以修改回報的位置
- 帳號密碼交給同事,就能代打
對多數公司來說這不是大問題——異常紀錄會攤在報表上,代打是有心理成本的。
但對真正在意代打的老闆,GPS 打卡確實有其極限。
順帶一提,出勤紀錄的形式本身不限於打卡機。依勞動部說明,行車紀錄器、GPS、手機打卡、網路回報等可資核實記載出勤時間的工具,都可以作為出勤紀錄;重點在於能不能核實,而不是用哪一種裝置。
動態 QR Code 掃碼打卡
原理跟 Google Authenticator 的一次性碼類似。
店內放一台顯示 QR Code 的螢幕,QR Code 每 30–60 秒自動更換。
員工用手機內建相機掃描 → 開啟打卡網頁 → 後端驗證 token 未過期 → 完成打卡。
這個機制增加的條件是:
「打卡當下,有人拿著這個帳號,在螢幕前掃到了當時有效的碼」。
token 幾十秒就失效,事後截圖傳給別人幾乎不可用。
但它不能證明本人在現場,至少下面幾種情況擋不住:
- 同事即時把畫面拍給人、或用視訊分享畫面,對方在幾十秒內掃描
- 請現場的同事拿自己的手機、用你的帳號登入掃碼
- 看板螢幕被拍下來即時轉傳
所以比較務實的說法是:GPS 打卡記錄「誰按了打卡、裝置說它在哪」,掃碼打卡額外要求「當下要取得現場才有的短效碼」,讓代打從「傳個密碼就好」變成「要有人配合、而且要即時」。它提高門檻,但不是身分驗證。
為什麼是每 30–60 秒換碼
設計時考慮過「每天換一張」的簡單版本。
但每日換碼只防得了「把 QR Code 印出來帶回家」——拍張照傳給同事,當天照樣有效,對代打幾乎沒有約束力。
而每分鐘換碼的開發成本,跟每日換碼差不多。既然如此,就沒有理由選弱的那個。
不用 App、不用硬體
這個功能全程只需要網頁:
- 看板端:任何一台有瀏覽器的裝置——舊手機、平板、店內電腦——全螢幕開著一個網頁,定時向後端要新 token 重繪 QR Code
- 員工端:手機內建相機掃碼(iOS/Android 原生支援),開啟網頁後用既有的登入 session 驗證身分
- 後端:QR Code 的內容是一個帶時效簽名的 URL,不需要自己管理 token 表
不需要 App、不需要外部付費服務、不需要客戶購買專用硬體。
QR 不是取代,而是疊加
只做 QR 打卡是行不通的:
- 看板裝置斷電或斷網,全店都打不了卡
- 外勤、居家型的員工根本沒有「現場」可掃
所以設計上兩種方式並存,由公司層級設定切換:
- 直接打卡(預設,新客戶零設定即可用)
- 強制掃碼打卡(給在意代打的老闆)
- 兩者皆可
工程上,QR 是疊加在現有打卡流程前的一道現場驗證關卡——一個設定開關、一個看板頁、一段 token 驗證,多數邏輯與現行打卡共用。
每筆打卡都會記錄來源方式,報表上可以區分紀錄是用哪種方式產生的。要注意的是,這只說明紀錄怎麼來,不等於系統替你認定這筆紀錄是否屬實;真的發生爭議時,出勤紀錄是證據之一,不是結論。
後記
防代打是個軍備競賽的題目,指紋機、人臉辨識都是市場上的答案,但那些方案都需要硬體。
動態 QR Code 是我在「純網頁就能實作」與「代打成本確實提高」之間找到的折衷點。它解決不了所有代打,也不該被當成能解決所有代打的功能來賣。