Melissa Data Home PageCall 1-800-MELISSA for Data Quality Solutions
Shopping Cart Buy | Newsletters | Search
Products Solutions Downloads Support Resources Lookups Contact Us

 


 

Address Object Frequently Asked Questions

1. Address Content
    1.1 Address Basics
        1.1.1 What is CASS and what is it for?
        1.1.2 What is DPV and what is it for?
        1.1.3 What is LACS and what is it for?
        1.1.4 What is EWS and what is it for?
    1.2 Address Verification Basics
        1.2.1 What fields are required for Address Verification?
        1.2.2 What kind of properties does Address Object return?
    1.3 Address Terms Advanced
        1.3.1 What are Unique ZIP Codes?
        1.3.2 What are Multiple Matches?
        1.3.3 What are Vanity and Prestige City Names?
        1.3.4 What does General Delivery mean?
        1.3.5 What is a Simplified Address?
 

2. Technical Content
    2.1 Installation
        2.1.1 What is in my DQ Suite DVD?
        2.1.2 What do I need to do when installing the DQT Suite DVD?
        2.1.3 How do I automate the Windows DQT Suite setup?
        2.1.4 How do I use checksums to validate the integrity of my files?
    2.2 Basic Usage
        2.2.1 How do I initialize properly?
        2.2.2 What files are required in order to initialize the Address Object?
        2.2.3 How do I run Address Object in batch mode?
        2.2.4 What are the interfaces of Address Object and what do they do?
        2.2.5 How can I take advantage of the three other interfaces?
        2.2.6 How can I get a list of all ZIP Codes in a specified radius of a specific ZIP
                Code?
        2.2.7 How can I locate the closest dealer? 
    2.3 Add-On's
        2.3.1 What are Add-on’s? Which Add-ons are available and what do they do?
        2.3.2 How do I use the Add-ons?
        2.3.3 How do I know if I have activated an Add-on's correctly?
        2.3.4 What fields are updated by each Add-on in detail?
    2.4 Environment Variables
        2.4.1 What environment variables are available and why use them?
        2.4.2 How do I use MDADDR_LICENSE?
        2.4.3 How do I use MDADDR_SERVERMODE?
    2.5 Speed
        2.5.1 What affects the speed of Address Object?
        2.5.2 I'm using the address object to verify a SQL table. Performance wise, does
                the sequence of the input matter? By ZIP Code or by city?
    2.6 Advanced
        2.6.1 What is the difference between the COM and Standard version of Address
                Object?
        2.6.2 How do I Strongly name an application that calls Address Object?
        2.6.3 What is a wrapper and how do I use it?
        2.6.4 How do I resolve Multiple Matches with Street Data?


FAQs

 

1. Address Content

1.1 Address Basics

1.1.1 What is CASS and what is it for?

CASS certification is designed in cooperation with the mailing industry to improve the accuracy of postal automation. CASS implies the existence of an address by validating the range of a street number. It provides a common measure by which to test the quality of address matching software and also addresses known deficiencies common across software products that require correction. Melissa Data CASS software is tested annually with a USPS provided test file to verify that sufficient overall percentage (98%) of the output addresses are coded correctly.

1.1.2 What is DPV and what is it for?

Delivery Point Validation definitively confirms and validates the actual street number, not just the CASS range. It also provides flags and footnotes that evaluate the quality of data. DPV can identify a CMRA (Commercial Mail Receiving Authority) and can be used to pinpoint an address that is missing a suffix, directional or suite to determine the correct address.

1.1.3 What is LACS and what is it for?

LACS was developed in response to local 911 systems to convert business and residential rural route addresses to street-style addresses.

Because the residents do not actually move when they receive a new address, change of address forms are not filed. These permanent address conversions typically involve renumbering and renaming rural route, highway route and box numbers as city-style addresses. These changes are updated monthly, and after one year, the original rural route addresses are considered undeliverable. LACS processing identifies these addresses and automatically updates your records.

1.1.4 What is EWS and what is it for?

EWS stands for Early Warning System from the USPS. EWS addresses are flagged by Address Check when they are scheduled for inclusion in the USPS database but are not added yet. The addresses are typically new high rises, or new housing subdivisions that are being assigned deliverable mail addresses. The EWS file when present in the Address Object directory ensures that addresses not present in the USPS master file will not be eliminated or coded inaccurately. The EWS file is updated weekly and can be downloaded via the Melissa Data FTP site to give customers the freshest new address information.

1.2 Address Verification Basics

1.2.1 What fields are required for Address Verification?

To correctly validate an address, you need at least one of the following combinations: [Address,City,State] or [Address,ZIP]. If no city and state are submitted, address object will populate these properties for a given ZIP Code.

1.2.2 What kind of properties does Address Object return?

Address object has many properties that can be returned. The most popular properties returned are Address, Address2, AddressTypeCode, AddressTypeString, CarrierRoute, City, CityAbbreviation, Company, CongressionalDistrict, CountyFips, CountyName, DeliveryPointCode, DeliveryPointCheckDigit, ErrorCode, ErrorString, LACS, LastLine, MSA, ParsedAddressRange, ParsedPostDirection, ParsedPreDirection, ParsedPrivateMailboxName, ParsedPrivateMailboxNumber, ParsedStreetName, ParsedSuffix, ParsedSuiteName, ParsedSuiteRange, Plus4, PMSA, PrivateMailBox, State, StatusCode, Suite,  TimeZone, TimeZoneCode, Urbanization, ZIP, and ZIPType.

1.3 Address Terms Advanced

1.3.1 What are Unique ZIP Codes?

A unique ZIP Code is assigned to a company or organization. The USPS rule is that any information on the address line is acceptable when coding an address to a unique ZIP Code for which the object will always append a plus4 of 0001.

1.3.2 What are Multiple Matches?

A multiple match is an error in the national database in which two identical street ranges were found with different ZIP+4s. CASS rules state that Address Object cannot guess which ZIP+4 should be appended.

1.3.3 What are Vanity and Prestige City Names?

A vanity city name is an acceptable city name for the address and ZIP Code submitted. If the city name is an acceptable or vanity city name, the object will not change the city property. If the city appended is not acceptable, the object will change the city to the USPS referred city name.

1.3.4 What does General Delivery mean?

If a high rise has a General Delivery area, an address without a suite will code to the General Delivery ZIP+4. If the same address has the ZIP+4 often times it will code to the ZIP+4 for the suite itself or the floor.

1.3.5 What is a Simplified Address?

A simplified address is derived from a DSF walk sequence list which includes 100% of addresses in a Carrier Route. A simplified address is CASS certified on a higher level than Address Object can perform, therefore it cannot be validated or CASS certified.

 

2. Technical Content

2.1 Installation

2.1.1 What is in my DQ Suite DVD?

Here is a general overview of the structure and contents of the DQ Suite DVD:

Root
- setup.exe [For Windows install

- setup.sh [For Linux/Solaris install]

- changes.txt [Text file containing latest changes and updates]

- qstart.pdf [PDF file containing descriptions of the Objects, Install guides, Implementation guides, and other important information]

Included Data Quality Objects Folders
- The Included Data Quality Objects folders are separated into the different Objects included in your DQ Suite DVD: Address Object, Email Object, Name Object, Phone Object and Presort Object.

- Each folder contains a PDF manual explaining the Objects’ methods, properties and initialization procedures.

Data Files Folder
- Each Included Data Quality Objects directory contains a Data Files folder which contains necessary files to run the Object.
- For Address Object, the Data Files directory contains necessary data files as well as folders to the different Add-ons (DPV, LACSLink, and RBDI).

Operating System Folders
- Each Included Data Quality Tool directory contains folders for different Operating Systems: Windows, Linux, AIX, and Solaris.

Sample Codes, Technologies (For Windows) and Libraries Folders
- Located within each Operating System Directory are folders for interfaces, samples, technologies and libraries.

- The interfaces and samples folders contain sample codes for different types of languages. Interface samples include wrappers for their respective languages.

- Readme files are included for step by step instructions on how to run sample codes.
- The Windows directory contains folders for COM and DLL technologies. The COM and DLL files are needed in order for the windows sample codes to run.

- All other Operating Systems contain Library folders for specific compilers such as GCC. These libraries are needed in order for the sample codes to run.

Extras
- This folder contains an Adobe Reader 9 installer for viewing PDF files, barcode fonts used for presorting, and other generic libraries used by Windows.


2.1.2 What do I need to do when installing the DQT Suite DVD?

When you install the DQT Suite DVD, please pay attention to changes.txt on the root of the DVD. It will contain any changes that have been made to any of the objects which may require you to rewrite/recompile your application. Also, when using the wrappers in the Interfaces folder, please read the readmes for each wrapper you are using as they may contain changes to the build process you have to make.


2.1.3 How do I automate the Windows DQT Suite setup?

The Windows Setup program for Data Quality Tools accepts optional command line parameters. These can be useful to system administrators and to other programs calling the Setup program wishing to automate the entire process without clicking on the dialogs.

Run the Setup on a test machine like so:

D:\setup.exe /SAVEINF="c:\setup.inf" - This can be any file name you wish.

This instructs Setup to save installation settings to the specified file.

Now for any number of other machines, setup can run off the created INF file to run an identical setup on each individual machine.

d:\setup.exe /LOADINF="c:\setup.inf”

This instructs Setup to load the settings from the specified file after having checked the command line. This file can be prepared using the '/SAVEINF=' command as explained above.

Note: Please remember to use quotes if the filename contains any spaces.



2.1.4 How do I use checksums to validate the integrity of my files?

Checksums are codes generated from files that can be used to check the integrity of a file. If two files have the same checksum, they can be assumed to be the same file. At Melissa Data, we use a md5 checksum utility (http://www.fourmilab.ch/md5/). If our tech support asks for your checksum, you can download the command line utility at the URL above. Then, after unzipping it, navigate to md5.exe from the command line, and type md5 “filename” for the checksum. We will then compare your checksum to ours to see if any corruption has occurred.
 

2.2 Basic Usage

2.2.1 How do I initialize properly?

There are several different ways to initialize Address Object. The preferred way is the following:

Create Address Object
PathToUSFiles property = Path
PathToCanadaFiles property = Path //add-on
PathToDPVDataFiles property = Path //add-on
PathToRBDIFiles property = Path //add-on
PathToLACSLinkDataFiles property = Path //add-on
SetLicenseString(“License”) method
InitializeDataFiles() method

You can also use methods to set the path to the data files. This is necessary for languages like Cold Fusion.

Create Address Object
SetPathToUSFiles(Path) method
SetPathToCanadaFiles(Path) method //add-on
SetPathToDPVDataFiles(Path) method //add-on
SetPathToRBDIFiles(Path) method //add-on
SetPathToLACSLinkDataFiles(Path) method //add-on
SetLicenseString(“License”) method
InitializeDataFiles() method

Another older method previously used to initialize still works but is not recommended. It has been left in the Address Object for backwards compatibility.

Create Address Object
SetLicenseString(“License”) method
Initialize(Path,Path,Path) method

For more information on these properties and methods, please reference your Address Object manual.


Global Changes

The new name for “DQT Suite” is now just “DQ Suite”. There are a few references to “DQT Suite” in the Address Object FAQs page, they just have to be changed to “DQ Suite”.


2.2.2 What files are required in order to initialize the Address Object?

The files that must be present are:

mdAddr.nat
mdAddr.str
mdAddr.dat
mdAddr.lic
mdAddr.SFX



2.2.3 How do I run Address Object in batch mode?

There is no batch mode in Address Object. It will always verify one address at a time. To verify multiple addresses, simply create a loop and feed the addresses in one at a time. Make sure to call the ClearProperties method before each iteration to clear any remnants of the previous address.

2.2.4 What are the interfaces of Address Object and what do they do?

Address Object currently has four different interfaces, each of which performs different functions. These interfaces are AddressCheck, Parse, StreetData, and ZIPData.

The AddressCheck interface is the main interface that handles all the regular address verification processes. It is the one used by virtually all of our customers.

The Parse interface is used to parse an address. If you enter the address line into this interface, it will give you the range, predirection, street name, suffix, postdirection, suite name, suite number and so on. It will also give you multiple parses and let you decide which parse is best.

The StreetData interface is used to search for street information. If you enter a street name and the ZIP Code, the interface will return all records for that street. With that information, you can make determinations like which street ranges and suites are possible.

The ZIPData interface is used to find information about ZIP Codes, find all ZIP Codes in a city, and find all cities in a state.



2.2.5 How can I take advantage of the three other interfaces?

The Parse interface is used to split the individual components of an address. It can also be used to change around the components in order to attempt verification. For example, if “3901 10A Parkview” is entered, the suite is incorrectly placed before the street name and Address Object cannot verify that address. However, if you pass the line through the Parse interface, by the third parse, you will get “3901 Parkview 10A” which will verify correctly.

The StreetData interface can be used to find the correct range. For example, if you get an address with an incorrect range, you can use StreetData to pull out all the possible ranges for that street. If you get an incorrect suite, you can pull out all the possible suite values. With this tool, if you have the street name of an apartment complex, you can pull out all the suites that are present in that complex. This interface supports the use of wildcards so that “Park*” will return any street that begins with “Park” in that particular ZIP Code.

With ZIPData interface, you can find all the ZIP Codes in a particular city. You can also find all the cities in a particular state. This interface also supports the use of wildcards so that you can search for all cities that begin with “Las” if you enter “Las*”. The ZIPData interface is also used to construct elementary Dealer Locators and to just pull up information about a ZIP without using the full address.



2.2.6 How can I get a list of all ZIP Codes in a specified radius of a specific ZIP Code?

The simplest way to do this is by brute force. It sounds like it may take a long time but it can generally be completed in less then 13 seconds.

1. Retrieve and store the latitude & longitude of the ZIP Code you wish to create a radius around. This can be done using the FindZIP method located in the ZIPData interface.

2. Create a radius variable that will contain the radius you wish to search.

3. Create a counter variable and set it to 1. This will act as the ZIP Code you are comparing against the ZIP Code you wish to build a radius around.

4. Create a distance variable and set it to 0.

5. Create a loop to do the following while the counter variable is less than 100000:

a. Pass the counter variable into the FindZIP method and retrieve the latitude & longitude.

b. Pass the stored lat/long & the just retrieved lat/long into the ComputeDistance method.

c. Compare the result returned from the ComputeDistance method with the value in the radius variable. If it is equal to or less than the value in the radius variable, then write the value of the ZIP property to your list of ZIP Codes within the specified radius.

d. Increment your counter by 1 and repeat the loop until your counter equals 100000.

6. You should now have a list of ZIP Codes within the specified radius.

Your logic should look like this:

Variables
--ZIP Code to build radius around--
ZIPIn = 92688

--Radius to search--
radius = 25

--For ease of comparison, now you only have to check if the result is less than instead of less than or equal to--
radius = radius + 1

--Counter--
cnt = 1

--Distance--
dist = 0

--Input ZIP Code's latitude & longitude--
latIn = 0
longIn = 0

--Comparing latitude & longitude—
ckLat = 0
ckLong = 0

--List to store ZIP Codes within radius--
ZIPList


Logic
--Get the latitude & longitude of the input ZIP Code
object.FindZIP(ZIPIn)
latIn = object.Latitude
longIn = object.Longitude

--Start the “While” loop--
do while (cnt < 100000)

--Get the latitude & longitude of the comparing ZIP Code—
object.FindZIP(cnt)
ckLat = object.Latitude
ckLong = object.Longitude

--Retrieve the distance between the two ZIP Codes--
dist = object.ComputeDistance(latIn, longIn, ckLat, ckLong)

--Compare the distance to the radius--
if (dist < radius)
ZIPList = object.ZIP
end if

cnt = cnt + 1
end do


2.2.7 How can I locate the closest dealer?

Before you can create your dealer locator you must prep your dealer database (You must have a dealer database in order to utilize this solution).

1. Append the latitude & longitude to each record in your dealer database by performing the following steps:

Pass the ZIP Code into the FindZIP method of the ZIPData interface of the Address Object.

Retrieve the latitude & longitude from the latitude & longitude properties and write them back to your dealer database.

You are now ready to build your dealer locator.
1. Retrieve and store the latitude & longitude of the ZIP Code you wish to locate the nearest dealer. This can be done using the FindZIP method located in the ZIPData interface.

2. Create a distance variable and set it to 10000.

3. Create a dealer variable.

4. Create a loop to do the following until your dealer database reaches EOF:

Retrieve the latitude & longitude from the dealer record

Pass the stored lat/long & the just retrieved lat/long into the ComputeDistance method.

If the distance returned is less than the value in your distance variable, then replace the value in your distance variable with the value retrieved from the ComputeDistance method and store the dealer in your dealer variable.

Repeat the loop until your dealer database reaches EOF.

5. You should now have your closest dealer.

 

Your logic should look like this:

Variables
--ZIP Code to build radius around--
ZIPIn = 92688

--Distance--
dist = 10000

--Input ZIP Code's latitude & longitude--
latIn = 0
longIn = 0

--Comparing latitude & longitude--
ckLat = 0
ckLong = 0


Logic
--Get the latitude & longitude of the input ZIP Code--
object.FindZIP(ZIPIn)
latIn = object.Latitude
longIn = object.Longitude

Do while Dealer database is NOT EOF (End Of File)
--Retrieve dealer lat & long--
ckLat = dealer.lat
ckLong = dealer.long

--Calculate distance--
result = Object.ComputeDistance(latIn, longIn, ckLat, ckLong)

--Compare to stored distance--
if(result<dist)

--Save new distance and dealer info--
dist = result
end if

--Get next record and repeat loop--
 

2.3 Add-On's

2.3.1 What are Add-on’s? Which Add-on's are available and what do they do?

Add-on's are additional features for Address Object that require additional data files and can provide you with extra or increasingly accurate information.

Here is a complete list of current Add-on's available for Address Object:

- Canada
Allows you to correct Canadian addresses.

- DPV
Stands for Delivery Point Validation. Lets you verify that a specific address truly exists within the range on the street. This add-on reduces undeliverables and can help track whetheran address is missing a Suite number.

- LACSLink
Converts addresses from the Rural Route form to the 911 street address.

- RBDI
Identifies whether an address is a business or residence.
 



2.3.2 How do I use the Add-on's?

All logic for the add-on's listed in the previous sections is already built into the Address Object and just has to be activated with the correct data files. To activate an add-on, simply set the path to the data files for the add-on during the initialization phase. Please see the example below:

//set path to data files
addrobj.PathToUSFiles = “Path to mdaddr Data files”

//set path to all add-ons
addrobj.PathToCanadaFiles = “Path to Canada Data files”
addrobj.PathToDPVDataFiles = “Path to DPV Data files”
addrobj.PathToRBDIFiles= “Path to RBDI Data files”
addrobj.PathToLACSLinkDataFiles= “Path to LacsLink Data files”

//set license string
addrobj.SetLicenseString(“License”)

//Initialize
Result = addrobj.InitializeDataFiles()


This example activated all four add-on's. You will only need to set the path or activate the add-on's that you have subscribed to.



2.3.3 How do I know if I have activated an Add-on correctly?

If you have set the path to the add-on with any non-empty string, Address Object will return an error when initializing if the add-on is not initialized correctly. So, if you activate DPV by setting the PathToDPVDataFiles property and there is something wrong (like the DPV files not being at that specific path), the Initialize method will return an error code (>0) and the GetInitializeErrorString() method will tell you what the problem is (ie: Could not open a DPV Data Table(s)).



2.3.4 What fields are updated by each Add-on in detail?

All fields necessary for all add-on's are implemented in Address Object, and Verify Address populates many of these fields. When an add-on is activated, certain fields are populated with values obtained from the add-on (with more precise information).

Canada:
Once the Canada add-on is activated, simply input the Canadian address into the regular address input fields. The StatusCode property will return a code if it is a verified Canadian address.

DPV:
The DPV add-on updates the following fields over verify address: DPVFootnotes, SuiteStatus, StatusCode, DPVCount. Using DPV, you get accurate DPVFootnotes, usually extending from a 2-digit to a 4-digit code. With SuiteStatus, you will actually get less verified and more errors, as DPV offers a higher level of resolution than regular CASS certification. The StatusCode property returns a V for verified DPV addresses, and the DPVCount property is used solely in a CASS form for USPS mailings.

LACSLink:
LACSLinkIndicator and LACSLinkReturnCode properties are updated when LACSLink is activated and the address is verified.

RBDI
The only field used by the RBDI add-on is the RBDI property. It will return an R for Residential, B for Businesses and U for Unknown.

2.4 Environment Variables

2.4.1 What environment variables are available and why use them?

Currently, there are two environment variables available for Address Object, MDADDR_LICENSE and MDADDR_SERVERMODE. These environment variables were made available so that you can change certain aspects of your applications without recompiling. For more information, please read below.


2.4.2 How do I use MDADDR_LICENSE?

First, in order to use this environment variable, you must set the SetLicenseString method in your application with an empty string (ex: SetLicenseString(“”)). Then, Address Object will read your License String from the machine’s environment variables instead of your compiled application, allowing you to change it without recompiling. To use, follow these steps:

i) For Unix (Linux and Solaris), add these lines to .cshrc or .profile of the login account that is running Address Object:
         csh, tcsh:
                      setenv MDADDR_LICENSE "12345678"

        
bash, sh, ksh:
                            MDADDR_LICENSE ="1234567"
                            export MDADDR_LICENSE

ii) For Windows, add the following entry to your system environment variables:
         Variable Name: MDADDR_LICENSE
         Value: 1234567

Please note that 1234567 is not a real license string. You place your license string there that is given to you by your Customer Service Representative or from the label on your DVD. Then restart the application using Address Object.



2.4.3 How do I use MDADDR_SERVERMODE?

Currently, MDADDR_SERVERMODE only has one value, “sticky”. Sticky is an option that can be set to change the way Address Object behaves when many instances are created and destroyed. This variable, turned off by default, will enable Address Object to retain some of the data files used for initialization in memory after the last instance of Address Object is de-allocated, but before the application ends. This may be useful for applications that use multiple instances (For example: Web services that use individual threads for each client) and have times where the number of instances drop to 0 while the application is still running. Using this variable should increase the speed of initialization for those qualifying applications. To set the sticky variable, follow these steps:


i) For Unix (Linux and Solaris), add these lines to .cshrc or .profile of the login account that is running Address Object:
       csh, tcsh:
                     setenv MDADDR_SERVERMODE sticky

       bash, sh, ksh:
                          MDADDR_SERVERMODE=sticky
                          export MDADDR_SERVERMODE

ii) For Windows, add the following entry to your system environment variables:
         Variable Name: MDADDR_SERVERMODE
         Value: sticky

Then restart the application using Address Object.

2.5 Speed

2.5.1 What affects the speed of Address Object?

Obviously, the hardware specifications of the machine that is running Address Object is a major determinant in how fast Address Object will run. However, there are also other factors that can affect the speed of Address Object. 

-         Accessing the data files over the network can increase the processing time of Address Object, especially during initialization.

-         Bad or Garbage addresses generally take longer to process because Address Object attempts several matching algorithms before marking an address as bad.



2.5.2 I'm using the address object to verify a SQL table. Performance wise, does the sequence of the input matter? By ZIP Code or by city?

If you index your data by ZIP Code you should see an increase of performance.

2.6 Advanced

2.6.1 What is the difference between the COM and Standard version of Address Object?

There are essentially no differences in the underlying code for the COM version and the Standard version of Address Object. The COM version has a COM interface layer used to communicate between your code and Address Object, and it is supported by many different languages. The Standard version of Address Object is an unmanaged dll that must be included into your program which eliminates the extra latency created by the COM layer.

 

2.6.2 How do I Strongly name an application that calls Address Object?

With Visual Studio 2003 - 2005 C#, generate the keyfile with the command 'sn -k keyfile.snk' from the Visual Studio Command Line. Next, copy the snk file to the folder containing your application. Open Visual Studio and in the Solution Explorer Tree, right click the project and choose Properties. Set the attribute for the Wrapper Assemble KeyFile to keyfile.snk from the common properties dialog.

Next, rebuild the C# application.

Now all references to the Runtime Callable Wrapper or the Interop wrapper should be strongly named.


Additional information:

Microsoft support page: http://support.microsoft.com/?kbid=313666



2.6.3 What is a wrapper and how do I use it?

A wrapper is an additional layer of code that acts as an interface from the standard AddressObject dll to the target programming language. Currently, wrappers are available for Java, PHP, PERL, and OWB. In order to use the wrapper, both the underlining code and the wrapper itself must be installed. So, to first install the underlying code, run the install for AddressObject on the root of the DQT Suite DVD. Now, you must install the wrapper itself. Look in the Interfaces folder of the DVD and locate the language and platform of the wrapper you want. Then, follow the readme to install the wrapper. Once installed, again refer to the readme for instructions to setup and run.

2.6.4 How do I resolve Multiple Matches with Street Data?

When Address Object return to you an error code of 'M' indicating a multiple match address, you can use street data to figure out exactly which addresses the input can be matched to. You do so by using the street data interface, which is used to look up the address records inside the USPS database. Here are the steps to find those matches:

1) Call the FindStreet Method (and FindStreetNext) by passing in the street name and zip code of the input

a) You must isolate the street name out of the address. To do so, you can use the Parse interface to split the address into its address components, including street name.

b) If you do not have a zip and only have the city and state in the input, but can generate a zip by using the ZipData interface FindZip method. Pass in the city and state to get a list of all zip codes in that city/state. You can use any of the zip codes returned by FindZip because FindStreet will search all zip codes within the city of the given zip.

2) Take the results of the street data search and filter out the records that your input range does not fall into by using the IsAddressInRange2 method.

a) Once again, you need to isolated range of the input. You can get that value from the Parse interface just like the street name.

Let’s take a look at an example using the steps above. The address 30 Ardsley, 11570 returns a Multiple Match Error.

1) We call the FindStreet("Ardsley","11570",0) and FindStreetNext to retrieve all streets named "Ardsley" in that zip code. We get the following result (at the time of this writing):

1-99 Odd Ardsley Cir 11570-2003

1-99 Odd Ardsley PL 11570-2005

2-98 Even Ardsley Cir 11570-2007

2-98 Even Ardsley PL 11570-2004

2) We use IsAddressInRange2 to see if our range, "30" fits within the range of each record. Doing so, we get the following filtered results:

2-98 Even Ardsley Cir 11570-2007

2-98 Even Ardsley PL 11570-2004

3) We can now present Ardsley Cir and Ardsley PL as possible addresses to our user.

Note: There are a few caveats. Some records have a plus4 of xxxx. This means that they are undeliverable and you may choose to not show them to the user. Due to these undeliverable records, a multiple match search by only have one final result. You may also want to experiment with the ZipCodeOnly option in the FindStreet method. You may choose to search just within the given zip code before searching the entire city of the given zip code. Disclaimer: This tip is not intended to be a comprehensive guide. Please review all methods and properties in the Address Object manual as well as the data returned by Street data. The best way to proceed is to familiarize yourself with the data returned and perform test cases.