Alpha Video Training
Results 1 to 5 of 5

Thread: UK Postcode Validation

  1. #1
    Member
    Real Name
    David Abbott
    Join Date
    Mar 2007
    Location
    Bedfordshire, England
    Posts
    76

    Default UK Postcode Validation

    Rather than try and re-invent the wheel, I am wondering if any members have, or know where in can be obtained, validating code for entering postcodes into a field.

    Thanks in advance.

  2. #2
    Member
    Real Name
    Robin James
    Join Date
    May 2000
    Location
    Henley on Thames, UK
    Posts
    125

    Default Re: UK Postcode Validation

    Yes, I'd also like to know if someone has done it. I thought about it from looking at:

    http://www.datadictionaryadmin.scot....=Content.show&
    and
    http://www.govtalk.gov.uk/gdsc/html/frames/PostCode.htm

    but is more involved than my first glance suggested. Perhaps the easiest is to buy a postcode to address generator - almost certainly works with Alpha. Costs £80 per year per machine cheapest(?).

    Shame also our UK phone numbers don't have a consistent format like US.

  3. #3
    Member
    Real Name
    Tony Rutherford
    Join Date
    Apr 2000
    Location
    Darwen, England
    Posts
    147

    Default Re: UK Postcode Validation

    I have designed two functions to check whether a postcode has a valid structure. Please note - they only check the structure, i.e. whether the letters and numbers are in the right places; they don't tell you whether the postcode actually exists.

    ValidPostcode() returns .T. or .F. - it can be used in the CanWrite event in a field rule, e.g.:

    Code:
    if ValidPostcode(upper(a_field_value) = .F. then
        cancel()
    end if
    If the result is .F., a message box tells you why it is invalid.

    ValidPostcode2() returns a character result - either "OK" or the reason why it isn't OK.

    The structure of valid postcodes is specified in the Cabinet Office's UK Data Standards Catalogue at http://www.govtalk.gov.uk/gdsc/html/frames/PostCode.htm

    Please note that the website says that the structure could change in the future.

    ValidPostcode():

    Code:
    FUNCTION ValidPostcode as L (vcPostCode as C)
    
    	'Checks whether postcode structure is valid
    	'Created by Tony Rutherford 10/9/06
    	'Based on information at http://www.govtalk.gov.uk/gdsc/html/frames/PostCode.htm
    	'Copyright Tony Rutherford 2006
    
    	'Declare & initialise variables
    	DIM vcPostCode as C					'user input
    	DIM i as N							'counter
    	DIM vcChar as C						'character value
    	DIM vnAscii as N					'ascii code value
    	DIM vcFormat as C					'format of postcode
    	DIM vnSpacePos as N					'position of space in postcode
    
    	'Check for special code
    	IF vcPostCode = "GIR 0AA" THEN
    		ValidPostcode = .T.
    		EXIT FUNCTION
    	END IF
    
    	'Check for multiple spaces
    	IF at("  ", vcPostCode) <> 0 THEN
    		msgbox("Error!", "Postcode cannot contain multiple spaces", UI_STOP_SYMBOL + UI_OK)
    		ValidPostcode = .F.
    		EXIT FUNCTION
    	END IF
    
    	'Check for leading/trailing spaces
    	IF vcPostCode <> ltrim(vcPostCode) THEN
    		msgbox("Error!", "Postcode must not have leading spaces.", UI_STOP_SYMBOL + UI_OK)
    		ValidPostcode = .F.
    		EXIT FUNCTION
    	END IF
    
    	'Check number of words
    	IF w_count(vcPostCode) <> 2 THEN
    		msgbox("Error!", "Postcode must have two parts separated by a space.", UI_STOP_SYMBOL + UI_OK)
    		ValidPostcode = .F.
    		EXIT FUNCTION
    	END IF
    
    	'Check structure
    	FOR i = 1 to len(vcPostCode)
    		vcChar = substr(vcPostCode, i, 1)
    		vnAscii = asc(vcChar)
    		IF vnAscii >= 65 .and. vnAscii <= 90 THEN
    			vcFormat = vcFormat + "A"
    		ELSEIF vnAscii >= 48 .and. vnAscii <= 57 then
    			vcFormat = vcFormat + "N"
    		ELSEIF vcChar = " " then
    			vcFormat = vcFormat + " "
    		ELSE
    			msgbox("Error!", "Postcode must have two parts separated by a space. Only letters and numbers can be used.", UI_STOP_SYMBOL + UI_OK)
    			ValidPostcode = .F.
    			EXIT FUNCTION
    		END IF
    	NEXT i
    	IF .not. word_exists("AN NAA,ANN NAA,AAN NAA,AANN NAA,ANA NAA,AANA NAA", vcFormat, ",") THEN
    		msgbox("Error!", "Postcode must be in one of the following forms: AN NAA,ANN NAA,AAN NAA,AANN NAA,ANA NAA,AANA NAA, where A is a letter and N is a number.", UI_STOP_SYMBOL + UI_OK)
    		ValidPostcode = .F.
    		EXIT FUNCTION
    	END IF
    
    	'Check 1st character
    	vcChar = left(vcPostCode, 1)
    	IF vcChar $ "QVX" THEN
    		msgbox("Error!", "The first character cannot be Q, V or X.", UI_STOP_SYMBOL + UI_OK)
    		ValidPostcode = .F.
    		EXIT FUNCTION
    	END IF
    
    	'Check 2nd character
    	IF substr(vcFormat, 2, 1) = "A" THEN
    		vcChar = substr(vcPostCode, 2, 1)
    		IF vcChar $ "IJZ" THEN
    			msgbox("Error!", "The second character cannot be I, J or Z.", UI_STOP_SYMBOL + UI_OK)
    			ValidPostcode = .F.
    			EXIT FUNCTION
    		END IF
    	END IF
    
    	'Check 3rd character
    	IF substr(vcFormat, 3, 1) = "A" THEN
    		vcChar = substr(vcPostCode, 3, 1)
    		IF .not. (vcChar $ "ABCDEFGHJKSTUW") THEN
    			msgbox("Error!", "The third character must be A, B, C, D, E, F, G, H, J, K, S, T, U or W.", UI_STOP_SYMBOL + UI_OK)
    			ValidPostcode = .F.
    			EXIT FUNCTION
    		END IF
    	END IF
    
    	'Check 4th character
    	IF substr(vcFormat, 4, 1) = "A" THEN
    		vcChar = substr(vcPostCode, 4, 1)
    		IF .not. (vcChar $ "ABEHMNPRVWXY") THEN
    			msgbox("Error!", "The fourth character must be A, B, E, H, M, N, P, R, V, W, X or Y.", UI_STOP_SYMBOL + UI_OK)
    			ValidPostcode = .F.
    			EXIT FUNCTION
    		END IF
    	END IF
    
    	'Check 2nd half
    	vnSpacePos = at(" ", vcPostCode)
    	FOR i = 1 to 2
    		vcChar = substr(vcPostCode, vnSpacePos + i + 1, 1)
    		IF vcChar $ "CIKMOV" THEN
    			msgbox("Error!", "The characters in the second part of the postcode cannot be C, I, K, M, O or V.", UI_STOP_SYMBOL + UI_OK)
    			ValidPostcode = .F.
    			EXIT FUNCTION
    		END IF		
    	NEXT i
    
    	ValidPostcode = .T.
    
    END FUNCTION
    ValidPostcode2():

    Code:
    FUNCTION ValidPostcode2 as C (vcPostCode as C)
    
    	'Checks whether postcode structure is valid and returns either "OK" or error message as result
    	'Created by Tony Rutherford 10/9/06
    	'Based on information at http://www.govtalk.gov.uk/gdsc/html/frames/PostCode.htm
    	'Copyright Tony Rutherford 2006
    
    	'Declare & initialise variables
    	DIM vcPostCode as C					'user input
    	DIM i as N							'counter
    	DIM vcChar as C						'character value
    	DIM vnAscii as N					'ascii code value
    	DIM vcFormat as C					'format of postcode
    	DIM vnSpacePos as N					'position of space in postcode
    
    	'Check for special code
    	IF vcPostCode = "GIR 0AA" THEN
    		ValidPostcode2 = .T.
    		EXIT FUNCTION
    	END IF
    
    	'Check for multiple spaces
    	IF at("  ", vcPostCode) <> 0 THEN
    		ValidPostcode2 = "Postcode cannot contain multiple spaces"
    		EXIT FUNCTION
    	END IF
    
    	'Check for leading/trailing spaces
    	IF vcPostCode <> ltrim(vcPostCode) THEN
    		ValidPostcode2 ="Postcode must not have leading spaces."
    		EXIT FUNCTION
    	END IF
    
    	'Check number of words
    	IF w_count(vcPostCode) <> 2 THEN
    		ValidPostcode2 = "Postcode must have two parts separated by a space."
    		EXIT FUNCTION
    	END IF
    
    	'Check structure
    	FOR i = 1 to len(vcPostCode)
    		vcChar = substr(vcPostCode, i, 1)
    		vnAscii = asc(vcChar)
    		IF vnAscii >= 65 .and. vnAscii <= 90 THEN
    			vcFormat = vcFormat + "A"
    		ELSEIF vnAscii >= 48 .and. vnAscii <= 57 then
    			vcFormat = vcFormat + "N"
    		ELSEIF vcChar = " " then
    			vcFormat = vcFormat + " "
    		ELSE
    			ValidPostcode2 = "Postcode must have two parts separated by a space. Only letters and numbers can be used"
    			EXIT FUNCTION
    		END IF
    	NEXT i
    	IF .not. word_exists("AN NAA,ANN NAA,AAN NAA,AANN NAA,ANA NAA,AANA NAA", vcFormat, ",") THEN
    		ValidPostcode2 ="Postcode format must be: AN NAA,ANN NAA,AAN NAA,AANN NAA,ANA NAA,AANA NAA"
    		EXIT FUNCTION
    	END IF
    
    	'Check 1st character
    	vcChar = left(vcPostCode, 1)
    	IF vcChar $ "QVX" THEN
    		ValidPostcode2  = "The first character cannot be Q, V or X."
    		EXIT FUNCTION
    	END IF
    
    	'Check 2nd character
    	IF substr(vcFormat, 2, 1) = "A" THEN
    		vcChar = substr(vcPostCode, 2, 1)
    		IF vcChar $ "IJZ" THEN
    			ValidPostcode2 = "The second character cannot be I, J or Z."
    			EXIT FUNCTION
    		END IF
    	END IF
    
    	'Check 3rd character
    	IF substr(vcFormat, 3, 1) = "A" THEN
    		vcChar = substr(vcPostCode, 3, 1)
    		IF .not. (vcChar $ "ABCDEFGHJKSTUW") THEN
    			ValidPostcode2 = "The third character must be A, B, C, D, E, F, G, H, J, K, S, T, U or W."
    			EXIT FUNCTION
    		END IF
    	END IF
    
    	'Check 4th character
    	IF substr(vcFormat, 4, 1) = "A" THEN
    		vcChar = substr(vcPostCode, 4, 1)
    		IF .not. (vcChar $ "ABEHMNPRVWXY") THEN
    			ValidPostcode2 ="The fourth character must be A, B, E, H, M, N, P, R, V, W, X or Y."
    			EXIT FUNCTION
    		END IF
    	END IF
    
    	'Check 2nd half
    	vnSpacePos = at(" ", vcPostCode)
    	FOR i = 1 to 2
    		vcChar = substr(vcPostCode, vnSpacePos + i + 1, 1)
    		IF vcChar $ "CIKMOV" THEN
    			ValidPostcode2 = "The characters in the second part of the postcode cannot be C, I, K, M, O or V."
    			EXIT FUNCTION
    		END IF		
    	NEXT i
    
    	ValidPostcode2 = "OK"
    
    END FUNCTION
    I hope this helps.
    Tony

  4. #4
    Member
    Real Name
    David Abbott
    Join Date
    Mar 2007
    Location
    Bedfordshire, England
    Posts
    76

    Default Re: UK Postcode Validation

    That is exactly what I needed, Tony.

    You are a star!

    Thanks
    David

  5. #5
    "Certified" Alphaholic NoeticCC's Avatar
    Real Name
    Andrea Gill
    Join Date
    Nov 2007
    Location
    Golcar, West Yorkshire, UK
    Posts
    2,070

    Default Re: UK Postcode Validation

    Belated thanks, that is wonderful! :)

Similar Threads

  1. FieldRule - Validation
    By David Boomer in forum Alpha Five Version 6
    Replies: 5
    Last Post: 06-21-2005, 06:18 PM
  2. Postcode problem
    By Paul H in forum Alpha Four Versions 7 and 8
    Replies: 0
    Last Post: 08-13-2004, 10:45 AM
  3. Looking for postcode software to work with Alpha
    By David Little in forum Alpha Five Version 5
    Replies: 4
    Last Post: 05-28-2004, 05:20 AM
  4. Validation of more than 1
    By Wexler in forum Alpha Five Version 5
    Replies: 4
    Last Post: 03-01-2004, 03:23 AM
  5. String validation
    By Tom Cone Jr in forum Alpha Five Version 4
    Replies: 8
    Last Post: 07-21-2001, 03:26 AM

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •