DK77 目前的打卡方式是 GPS 定位打卡:
員工用手機登入 → 按下打卡 → 系統記錄時間、GPS 座標、IP 與裝置資訊, 再與公司設定的工作地點半徑比對。
這個機制驗證的是:
「這個帳號的人按了打卡」+「裝置自行回報的位置」。
問題就出在「裝置自行回報」這幾個字。
GPS 打卡的天花板
GPS 座標是員工的裝置回報給系統的:
- GPS 可以關閉,也可以偽造
- 帳號密碼交給同事,就能代打
對多數公司來說這不是大問題—— 異常紀錄攤在報表上,代打是有心理成本的。
但對真正在意代打的老闆,GPS 打卡有其極限。
動態 QR Code 掃碼打卡
解法的原理其實跟 Google Authenticator 一樣。
店內放一台顯示 QR Code 的螢幕, QR Code 每 30–60 秒自動更換。
員工用手機內建相機掃描 → 開啟打卡網頁 → 後端驗證 token 未過期 → 完成打卡。
這個機制驗證的是:
「打卡當下,人就站在店內螢幕前」。
token 幾十秒就失效, 截圖傳給在家的同事,根本來不及用。
一句話區分兩者:
GPS 打卡證明「誰打了卡」,QR 掃碼額外證明「打卡的人當時在現場」。
為什麼是每 30–60 秒換碼
設計時考慮過「每天換一張」的簡單版本。
但每日換碼只防得了「把 QR Code 印出來帶回家」, 拍張照傳給同事,當天照樣有效——防代打效果趨近於零。
而每分鐘換碼的開發成本,跟每日換碼幾乎一樣。 既然如此,就沒有理由選弱的那個。
不用 App、不用硬體
這個功能全程只需要網頁:
- 看板端:任何一台有瀏覽器的裝置——舊手機、平板、店內電腦——全螢幕開著一個網頁,定時向後端要新 token 重繪 QR Code
- 員工端:手機內建相機掃碼(iOS/Android 原生支援),開啟網頁後用既有的登入 session 驗證身分
- 後端:QR Code 的內容是一個帶時效簽名的 URL,不需要自己管理 token 表
不需要 App、不需要外部付費服務、不需要客戶購買專用硬體。
QR 不是取代,而是疊加
只做 QR 打卡是行不通的:
- 看板裝置斷電或斷網,全店都打不了卡
- 外勤、居家型的員工根本沒有「現場」可掃
所以設計上兩種方式並存,由公司層級設定切換:
- 直接打卡(預設,新客戶零設定即可用)
- 強制掃碼打卡(給在意代打的老闆)
- 兩者皆可
工程上,QR 只是疊加在現有打卡流程前的一道「現場驗證關卡」—— 一個設定開關、一個看板頁、一段 token 驗證,95% 的邏輯與現行打卡共用。
每筆打卡記錄來源方式,報表上就能區分紀錄的可信度。
後記
防代打是個軍備競賽的題目, 指紋機、人臉辨識都是市場上的答案。
但那些方案都需要硬體。
動態 QR Code 是我找到的甜蜜點: 純網頁就能實作,防代打效果卻是實質的。
估計 2–3 天可以上線,做完再來寫一篇實作紀錄。