A QR code-based verification system that allows customers to verify the identity of Turno collection agents at their door.
Customers scan a QR code on the agent's ID card → Opens a mobile-friendly verification page showing agent details with a "Verified Agent" badge.
- Instant Verification — Scan QR → see agent details in <2 seconds
- Trust Indicators — Verified badge, validity date, Turno branding
- Mobile-First — Works on any smartphone browser
- Bilingual — English/Hindi language toggle
- Secure URLs — Agent IDs encrypted with AES-256
- QR Generator — Internal tool for single & bulk QR code generation
FieldAgentVerify/
├── index.html # Verification page (customer-facing)
├── 404.html # Error page for invalid/inactive agents
├── css/
│ └── styles.css # Main stylesheet
├── js/
│ ├── crypto.js # AES encryption/decryption utilities
│ ├── api.js # API integration (placeholder)
│ ├── verify.js # Verification page logic
│ └── translations.js # Hindi/English translations
├── tools/
│ └── qr-generator.html # Internal QR code generator tool
├── assets/
│ └── (logos, images)
└── README.md
cd FieldAgentVerifyEdit js/crypto.js and replace the placeholder key:
const SECRET_KEY = 'your-32-character-secret-key-here';
⚠️ Important: Use the same key in both the QR generator and verification page.
Edit js/api.js and update the API endpoint:
const API_BASE_URL = 'https://your-api-endpoint.com';Upload all files to your web server. The verification page should be accessible at:
https://turno.club/agent/{encrypted_agent_id}
- Customer scans QR code on agent's ID card
- Browser opens
turno.club/agent/{encrypted_id} - Page decrypts the ID and fetches agent data from API
- Displays agent details with verified badge (or 404 if invalid)
Access: tools/qr-generator.html
- Enter employee ID (e.g.,
TRN-COL-001) - Click "Generate QR Code"
- Download the QR code image
- Prepare a CSV file with employee IDs (one per line or comma-separated)
- Upload the CSV file
- Click "Generate All"
- Download individual QR codes or all as ZIP
The system expects an API endpoint that returns agent data in this format:
GET /api/agents/{employee_id}
{
"success": true,
"data": {
"name": "Rajesh Kumar",
"employeeId": "TRN-COL-001",
"designation": "Senior Collection Agent",
"zone": "Koramangala, Bangalore",
"contact": "+91 98XXX XXX45",
"photoUrl": "https://example.com/photos/rajesh.jpg",
"validSince": "2025-01-01",
"isActive": true
}
}{
"success": false,
"error": "Agent not found"
}https://turno.club/agent/{encrypted_employee_id}
Example:
- Employee ID:
TRN-COL-001 - Encrypted:
U2FsdGVkX1...(AES-256 encrypted, Base64 encoded) - Full URL:
https://turno.club/agent/U2FsdGVkX1...
- AES-256 Encryption — Employee IDs are encrypted before embedding in QR codes
- No Direct ID Exposure — Customers cannot guess agent IDs
- Server-Side Validation — API validates agent existence and active status
- Masked Contact — Phone numbers partially hidden for privacy
- Update logo in
assets/folder - Modify colors in
css/styles.css(CSS variables at top)
- Edit
js/translations.jsto modify Hindi/English text
- Update in
js/translations.js:
supportNumber: '+91 1800-XXX-XXXX'- Chrome (Android/iOS) ✓
- Safari (iOS) ✓
- Firefox ✓
- Samsung Internet ✓
- Any modern browser with camera access
| Scenario | User Sees |
|---|---|
| Invalid/expired QR | 404 page with support contact |
| Agent deactivated | 404 page with support contact |
| Network error | Retry message with support contact |
| Corrupted QR data | 404 page with support contact |
Internal use only - Turno Pvt. Ltd.