所有文章

GPS 證明誰打了卡,QR Code 證明人在現場 — DK77 開發日誌

DK77 目前的打卡方式是 GPS 定位打卡:

員工用手機登入 → 按下打卡 → 系統記錄時間、GPS 座標、IP 與裝置資訊, 再與公司設定的工作地點半徑比對。

這個機制驗證的是:

「這個帳號的人按了打卡」+「裝置自行回報的位置」。

問題就出在「裝置自行回報」這幾個字。


GPS 打卡的天花板

GPS 座標是員工的裝置回報給系統的:

對多數公司來說這不是大問題—— 異常紀錄攤在報表上,代打是有心理成本的。

但對真正在意代打的老闆,GPS 打卡有其極限。


動態 QR Code 掃碼打卡

解法的原理其實跟 Google Authenticator 一樣。

店內放一台顯示 QR Code 的螢幕, QR Code 每 30–60 秒自動更換。

員工用手機內建相機掃描 → 開啟打卡網頁 → 後端驗證 token 未過期 → 完成打卡。

這個機制驗證的是:

「打卡當下,人就站在店內螢幕前」。

token 幾十秒就失效, 截圖傳給在家的同事,根本來不及用。

一句話區分兩者:

GPS 打卡證明「誰打了卡」,QR 掃碼額外證明「打卡的人當時在現場」。


為什麼是每 30–60 秒換碼

設計時考慮過「每天換一張」的簡單版本。

但每日換碼只防得了「把 QR Code 印出來帶回家」, 拍張照傳給同事,當天照樣有效——防代打效果趨近於零。

而每分鐘換碼的開發成本,跟每日換碼幾乎一樣。 既然如此,就沒有理由選弱的那個。


不用 App、不用硬體

這個功能全程只需要網頁:

不需要 App、不需要外部付費服務、不需要客戶購買專用硬體。


QR 不是取代,而是疊加

只做 QR 打卡是行不通的:

所以設計上兩種方式並存,由公司層級設定切換:

工程上,QR 只是疊加在現有打卡流程前的一道「現場驗證關卡」—— 一個設定開關、一個看板頁、一段 token 驗證,95% 的邏輯與現行打卡共用。

每筆打卡記錄來源方式,報表上就能區分紀錄的可信度。


後記

防代打是個軍備競賽的題目, 指紋機、人臉辨識都是市場上的答案。

但那些方案都需要硬體。

動態 QR Code 是我找到的甜蜜點: 純網頁就能實作,防代打效果卻是實質的。

估計 2–3 天可以上線,做完再來寫一篇實作紀錄。