<% 'WRITTEN BY BOB MCKAY, WWW.FRESHMANGO.COM - USE AS YOU WISH BUT PLEASE LEAVE THIS IN CODE 'ASPJpeg Based Image Form Verification Script 'VERSION 1.1 '*************** CODE BOX OPTIONS *************** codeBoxWidth = 120 codeBoxHeight = 40 numberOfLetters = 4 ' Allow Minimum 20 Pixels Per Letter - See codeBoxWidth Property Above) wantBorderRoundCodeBox = FALSE ' Put a Border Round the code box(MUST be TRUE or FALSE) borderRoundCodeBoxColor = "&H3C6194" backGroundColor = "&HFFEEEE" codeFontColor = "&H3C6194" numbersAllowedInCode = TRUE' Set to FALSE for a 'Letters Only' Code lettersAllowedInCode = TRUE' Set to FALSE for a 'Numeric Only' Code 'The fonts the script is allowed to select from - these MUST be installed on the Host computer hostFontList = Array("Arial", "Courier New", "Helvetica", "Times New Roman", "Georgia", "Comic Sans MS") minimumFontSize = 18 maximumFontSize = 36 '*************** DISTORTION OPTIONS *************** codeImageJPGQuality = 99' Lower this to allow JPG distortion of the codeBox multiColorLinesOnTop = FALSE' If set to FALSE, ON TOP line color defaults to code font color numberOfLongLinesOnTop = 2' Number of end to end lines drawn ON TOP of the code numberOfRandomLinesOnTop = 1' Number small lines drawn ON TOP of the code multiColorLinesUnderneath = TRUE' If set to FALSE, UNDERNEATH line color defaults to code font color numberOfRandomLinesUnderneath = 4' Number small lines drawn UNDERNEATH of the code '*************** FUNCTIONS & SUBROUTINES *************** SUB drawBorderRoundBox aspJpegImageObject.Canvas.Brush.Solid = FALSE ' Do NOT fill box with color when drawing aspJpegImageObject.Canvas.Pen.Color = borderRoundCodeBoxColor aspJpegImageObject.Canvas.DrawBar 0, 0, codeBoxWidth, codeBoxHeight END SUB SUB drawLines(numberOflongLines, numberOfShortLines, randomLineColor) aspJpegImageObject.Canvas.Pen.Color = codeFontColor FOR drawLongLines = 1 TO numberOflongLines IF randomLineColor = TRUE THEN aspJpegImageObject.Canvas.Pen.Color = "&H" & HEX(INT(RND*255)) & HEX(INT(RND*255)) & HEX(INT(RND*255)) aspJpegImageObject.Canvas.DrawLine 5, INT(RND * 35), (codeBoxWidth - 5), INT(RND * 35) NEXT FOR drawShortLines = 1 TO numberOfShortLines IF randomLineColor = TRUE THEN aspJpegImageObject.Canvas.Pen.Color = "&H" & HEX(INT(RND*255)) & HEX(INT(RND*255)) & HEX(INT(RND*255)) aspJpegImageObject.Canvas.DrawLine INT(RND*codeBoxWidth)+1, INT(RND * 35), INT(RND*codeBoxWidth)+1, INT(RND * 35) NEXT END SUB SUB writeCodeToImage(randomCode) aspJpegImageObject.Canvas.Font.Color = codeFontColor aspJpegImageObject.Canvas.Font.Quality = 4' Antialiased aspJpegImageObject.Canvas.Font.BkMode = "Opaque" ' Required for Antialiasing aspJpegImageObject.Canvas.Font.BkColor = backGroundColor FOR currentCodeLetter = 1 TO LEN(randomCode) ' Loop Through Letters in Code IF flipACoinFiftyFifty THEN aspJpegImageObject.Canvas.Font.Italic = TRUE IF flipACoinFiftyFifty THEN aspJpegImageObject.Canvas.Font.Bold = TRUE IF flipACoinFiftyFifty THEN aspJpegImageObject.Canvas.Font.Underlined = TRUE aspJpegImageObject.Canvas.Font.Family = hostFontList(INT(RND * (UBOUND(hostFontList)+1))) 'Randomly Select Font from Host Font List aspJpegImageObject.Canvas.Font.Size = INT(RND * ((maximumFontSize - minimumFontSize)+1)) + minimumFontSize'INT(RND * 12) + 18 'Randomly Choose Font Size 14 to 26 aspJpegImageObject.canvas.print charXposition, 5, MID(randomCode, currentCodeLetter, 1) charXposition = charXposition + spacePerLetter' Move Cursor Along for Next Letter NEXT END SUB FUNCTION flipACoinFiftyFifty() flipACoinFiftyFifty = FALSE IF RND() > 0.49 THEN flipACoinFiftyFifty = TRUE END FUNCTION FUNCTION generateRandomCode() FOR placebo = 1 TO numberOfLetters IF (flipACoinFiftyFifty OR numbersAllowedInCode = FALSE) AND lettersAllowedInCode = TRUE THEN generateRandomCode = generateRandomCode & CHR(INT((26 * RND()) + 65)) ELSE generateRandomCode = generateRandomCode & CHR(INT((10 * RND()) + 48)) END IF NEXT SESSION("verificationCode") = generateRandomCode END FUNCTION '*************** BUILD THE CODE BOX *************** RANDOMIZE spacePerLetter = INT(codeBoxWidth / numberOfLetters)' Calculate How Much Space Each Character Has charXposition = 5' Start Cursor 5 Pixels from the Left Set aspJpegImageObject = Server.CreateObject("Persits.jpeg")' Initialise ASPJpeg Ovject aspJpegImageObject.New codeBoxWidth, codeBoxHeight, backGroundColor'Create A New Blank JPG based on Options IF wantBorderRoundCodeBox THEN drawBorderRoundBox ' If a border is wanted, draw one. CALL drawLines(0, numberOfRandomLinesUnderneath, multiColorLinesUnderneath)' Draw Some Distorting Lines OVER Verification Code CALL writeCodeToImage(generateRandomCode())' Call Function to Write Code, passing it randomCode CALL drawLines(numberOfLongLinesOnTop, numberOfRandomLinesOnTop, multiColorLinesOnTop)' aspJpegImageObject.Quality = codeImageJPGQuality' Set JPG Image Quality aspJpegImageObject.SendBinary' Send the Output of this Script as a JPEG Set aspJpegImageObject = NOTHING' Close ASPJpeg Object %>