| Input: Training data extracted from a genuine user, . Testing data extracted from a genuine user or an imposter, . |
| In the training phase: |
| (1) for each attribute do |
| (2) ← |
| (3) ← |
| (4) end for |
| (5) for each attribute do |
| (6) mean ← |
| (7) for each row do// Start from second row |
| (8) mean ← (mean + )/2 |
| (9) end for |
| (10) diff ← |
| (11) ratio ← (mean − )/diff |
| (12) divisor← 20 − (20 * ratio) |
| (13) rangeDiff← (diff/divisor) |
| (14) end for |
| (15) for each row and each attribute in do |
| (16) label ← ceil(()/rangeDiff) + (20 − divisor) |
| (17) if label = 0 |
| (18) label ← 1 // If the data is exactly the same value as the minimum time, then it should be categorized as label |
| (19) model← label // We just preserve it as to represent |
| (20) end for |
| In the testing phase: |
| (1) Convert the to the alphabet letter format based on the minimum point the rane difference from step 3 and step 7 |
| respectively, from training phase. And then we run from step 15 to step 20 for just once time. |
| (2) for each row in model do |
| (3) for each attribute in do |
| (4) if = model |
| (5) Score← 1 |
| (6) end for |
| (7) Final_Score← sum(Score) |
| (8) end for |
| (9) Checking_Score ← mean(Final_Score) // Can be max, min, median, mean, and mode |
| (10) return Checking_Score |
| Output: The score then used to compare the threshold |