About This Article
Coupons issued through point conversion have constraints to prevent fraudulent use. This article explains coupon specifications and their design rationale.
Basic Coupon Specifications
Characteristics of Issued Coupons
| Item | Specification | Reason |
|---|---|---|
| Discount type | Fixed amount discount | Points = amount is easy to understand |
| Discount amount | Same as points used | Clear 1pt = 1 yen rate |
| Usage count | Once only | Points are consumed only once |
| User | Customer who requested issuance only | Prevent transfer to others |
| Validity | 1 year from issuance | Provide sufficient time |
| Minimum purchase | None | Prioritize ease of use |
Coupon Code Format
Format: [Last 5 digits of customer ID]-[Random 6 characters]-[Point amount] Example: 70934-AB12CD-500
| Part | Example | Meaning |
|---|---|---|
| Last 5 digits of customer ID | 70934 | Whose coupon |
| Random 6 characters | AB12CD | Prevent duplicates (multiple issuance per customer possible) |
| Point amount | 500 | How much discount |
Benefits: Content visible from code, no duplicates, easy inquiry handling, difficult to generate fake codes
Constraint Details
Usage Count Limitation
At point conversion: 500pt consumed → 500 yen coupon issued
Customer-Specific Constraint
Shopify coupon settings:
- customer_selection: "specific"
- prerequisite_customer_ids: ["12345"]
| Effect | Details |
|---|---|
| Usage restriction | Only customer 12345 can use this code |
| Leak protection | Others can't use even if code is leaked |
| Sharing prevention | Sharing within family also not possible |
Enter coupon code on checkout screen
Is code valid? → Yes / Is this customer eligible? → Check customer ID
Match → Apply discount / Mismatch → "This code cannot be used"
Validity Period Design
Expired handling: Expired coupon → Cannot use, Consumed points → Not returned, Advance reminder → Under consideration
Fraud Prevention Measures
Anticipated Fraud and Countermeasures
| Fraud Pattern | Countermeasure |
|---|---|
| Code guessing | Random 6 characters makes guessing difficult |
| Code sharing | Customer-specific limits users |
| Multiple uses | Once-only limits usage |
| Use after expiration | Auto-invalidated by Shopify |
| Converting more than balance | Always check balance before conversion |
Brute Force Prevention
Code format: 70934-AB12CD-500
| Item | Content |
|---|---|
| Characters used | A-Z, 0-9 (36 types) |
| Digits | 6 digits |
| Combinations | 36^6 = ~2.1 billion patterns |
Brute force difficulty:
- Even at 100 attempts/second, testing all patterns takes ~240 days
- Plus rate limit of 60/minute
Additional measures: Temporary account lock on consecutive failures, detect abnormal patterns and alert
Conversion Rate and Limits
Points to Amount Conversion Rate
Base rate: 1 point = 1 yen
| Points | Coupon Amount |
|---|---|
| 100pt | 100 yen off coupon |
| 500pt | 500 yen off coupon |
| 1000pt | 1000 yen off coupon |
Future extensibility:
- Campaign: 1pt = 1.5 yen
- Member rank: Gold = 1pt = 1.2 yen
- Design to be configurable
Conversion Limits
| Limit | Value | Reason |
|---|---|---|
| Minimum conversion unit | 100pt | Prevent small coupon proliferation |
| Maximum per conversion | 10,000pt | Manual review for high amounts |
| Daily limit | 30,000pt | Limit damage from fraud |
| Conversion increment | 100pt steps | Avoid fraction handling complexity |
Customer Display
Coupon Information Display Items
| Item | Coupon 1 | Coupon 2 |
|---|---|---|
| Code | 70934-AB12CD-500 | 70934-XY34ZW-1000 |
| Amount | 500 yen off | 1,000 yen off |
| Expiration | January 15, 2025 | December 31, 2024 |
| Status | Unused [Copy Code] | Used (10/20/2024) |
Usage Instructions
Add products you want to purchase to cart
Go to checkout screen
Look for coupon input field on checkout screen
Example: 70934-AB12CD-500
Apply the coupon
Subtotal: 5,000 yen → Coupon: -500 yen → Total: 4,500 yen
Benefits of This Design
Security
- Minimize fraud risk
- Limit damage even if issues occur
- Traceable design for easy problem identification
Customer Experience
- Clear, easy-to-understand amounts
- Copy function reduces input effort
- Sufficient validity period for stress-free use