TypingDNA has been recognized as a Sample Vendor in Gartner® Hype Cycle™ for Digital Identity, 2024 and Gartner® Hype Cycle™ for Financial Crime, 2024. Learn more

How to record good typing patterns

Recording qualitative typing patterns is the basis for effective authentication with typing biometrics as a passive second factor

However, common pitfalls can easily lead you to record patterns that will result in low matching scores and higher False Rejection Rates (the metric that shows how often the system fails to identify an authorized user).

The good news is that all of these mistakes can be avoided by recording typing patterns correctly. To do that, you simply need to avoid the following all-too-common pitfalls:

            
                var
                tdna
                =
                new
                TypingDNA();
var textToType = 'This is my text to type' ;
var tp = tdna.getTypingPattern({ type : 1 , text : textToType });

That brings us to a second suggestion, when recording same text patterns: allow typos, but make sure at least 93% of the typed text matches the type-to-text:

            
                var
                textToType
                =
                'This is my text to type'
                ;
var typedText = document .getElementById( 'inputText' ).value;
var isValid = true ;

/** at least 80% of the length of the text should be typed */
if (typedText.length / textToType.length) < 0.8 {
isValid = false ;
}
/** at least 80% of the words should be typed correctly */
if ( compareTexts (textToType, typedText) < 0.8 {
isValid = false ;
}
            
                function
                compareTexts
                (t1, t2) {
var dt1 = t1.split( ' ' );
var dt2 = t2.split( ' ' );
var total2 = 0 ;
var total1 = 0 ;
for ( var i in dt2) {
total2 += (dt1.indexOf(dt2[i]) > -1 ) ? 1 : 0 ;
}
for ( var i in dt1) {
total1 += (dt2.indexOf(dt1[i]) > -1 ) ? 1 : 0 ;
}
var total = (dt1.length > dt2.length) ? dt1.length : dt2.length;
var length = (dt1.length > dt2.length) ? dt1.length : dt2.length;
return total / length;
}
            
                var
                textToType
                =
                'This is my text to type'
                ;
var tp = tdna.getTypingPattern({ type : 1 , text : textToType });
var isValid = true;
if (!tp) {
isValid = false;
}
            
                var
                textToType
                =
                'This is my text to type'
                ;
var tp1 = tdna.getTypingPattern({ type : 1 , text : textToType, targetId : 'inputText1' });
var tp2 = tdna.getTypingPattern({ type : 1 , text : textToType, targetId : 'inputText2' });
            
                var
                username =
                document
                .getElementById(
                'username'
                ).value;
var password = document .getElementById( 'password' ).value;
var tp = tdna.getTypingPattern({ type : 1 , text : username + password });

Read more about the recommended Rules to create texts.

            
                var
                tdna =
                new
                TypingDNA();

For more support, contact us at support@typingdna.com.