Skip to main content

Validate SSN using SQL UDF

Use the following code to validate Social Security Number (USA). The rules used for validation are based on SSA website, Wikipedia and HowStuffWorks.com. There may be more rules to the validation. If you find any, keep me posted! 'njoy Validating!

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

-- =============================================
-- Author: Ankeet
-- Create date: 6/19/2008
-- Description: Validates SSN
-- =============================================

ALTER FUNCTION ValidateSSN
(
@SSN varchar(11)
)
RETURNS varchar(255)
AS
BEGIN

/*
USAGE: SELECT DBO.ValidateSSN(777992322)
BASED ON:
http://people.howstuffworks.com/social-security-number2.htm
http://en.wikipedia.org/wiki/Social_Security_number
http://www.socialsecurity.gov/employer/stateweb.htm
http://en.wikipedia.org/wiki/Individual_Taxpayer_Identification_Number
The Administration publishes the last group number used for each area number.[17].
Since group numbers are allocated in a regular (if unusual) pattern, it is possible
to identify an unissued SSN that contains an invalid group number. Despite these
measures, many fraudulent SSNs cannot easily be detected using only publicly available
information.
*/

DECLARE @RETURN VARCHAR(255)
DECLARE @VALID TINYINT
DECLARE @tSSN VARCHAR(9)
SET @SSN = REPLACE(@SSN, '-', '')
SET @VALID = 1
SET @RETURN = ''
DECLARE @i INT
SET @i = 1
WHILE @i <= LEN(@SSN)
BEGIN
IF ASCII(SUBSTRING(@SSN, @i, 1)) NOT BETWEEN 48 AND 57
BEGIN
SELECT
@RETURN = @RETURN + 'NO; Non-Numeric Characters Not Allowed/n', @VALID = 0
GOTO FINALLY_RETURN
END
SET
@i = @i + 1
END

IF LEN(@SSN) > 9
SELECT @RETURN = @RETURN + 'NO; Maximum 9 Numbers Allowed/n', @VALID = 0
IF (CONVERT(SMALLINT, LEFT(@SSN, 3)) > 772 OR CONVERT(SMALLINT, LEFT(@SSN, 3)) = 666)
AND (LEFT(@SSN, 1) <> 9 AND SUBSTRING(@SSN, 4, 1) <> 7 AND SUBSTRING(@SSN, 4, 1) <> 8)
SELECT @RETURN = @RETURN + 'NO; Area Number (left 3) Not Valid/n', @VALID = 0
IF CONVERT(INT, LEFT(@SSN,9)) BETWEEN 987654320 AND 987654329
SELECT @RETURN = @RETURN + 'NO; Number Reserved For Advertisement (987-65-4320 to 987-65-4329)/n', @VALID = 0
IF LEFT(@SSN, 3) = '000' OR RIGHT(@SSN, 4) = '0000' OR SUBSTRING(@SSN, 4, 2) = '00'
SELECT @RETURN = @RETURN + 'NO; Consecutive Zeroes Not Allowed/n', @VALID = 0
IF @VALID = 1 SET @RETURN =
'YES'
FINALLY_RETURN:
RETURN @RETURN

END
GO

Comments

The Popular Ones

Using SQL To Calculate XIRR (Internal Rate of Return)

Thanks to binaryworld.net , I was finally able to get a sql way to calculate XIRR. After 2 long hours of search I found this site and the logic as well as the code works perfectly well! XIRR is a function in excel that calculates Internal Rate of Return based on payments/income over a period of time. Without further ado, here is the code (a slightly modified version from BinaryWorld.net. Happy XIRRing! -- First, CREATE XIRR Table to store values CREATE TABLE XIRRTempData( amt float, dt datetime, guid varchar(128) ) go create function dbo.XIRR( @d datetime, @GUID varchar(128) ) returns decimal(18,10) as begin /* USAGE: select @IRR = dbo.xirr(null, guid) select @IRR IRR, @IRR * 100 'IRR %' Note: Leave the first parameter (date) null if you wish to see the XIRR calculated as of the maximum date in the dataset provided else provide a specific date to see the XIRR calculated as the given date. Created By: Ankeet Shah Created On: 7/16/2008 */ IF @d is null SELECT @d = max(d) from Inc...

Alternating Row Background Color For SSRS Matrix (Pivot Table)

I had a tough time to apply alternate row colors to a SSRS Matrix and finally figured out! Without further ado, here it is... Assume you have a matrix with more than 1, lets say 2 row groupings; RG1 and RG2. 1. Right-click on RG2 (innermost row group), and select "Insert Group"; for simplicity call it "RowColorGroup" 2. In the "Group On" section, add some constant value - for example ="" or ="ankeet" etc... you get the idea! 3. Select the newly created group "RowColorGroup" and enter the following in its "Value" property: =iif(RunningValue(Fields!RG1.Value & Fields!RG2.Value,CountDistinct,Nothing) Mod 2, "LightSteelBlue", "White") 4. Select the "BackgroundColor" property of "RowColorGroup" and enter "=Value" 5. Set the width of "RowColorGroup" to 0pt and "CanGrow" to false 6. Select the data cell(s) and set their "BackgroundColor" pro...

cannot create a column accessor for OLE DB provider "ibmdasql" for linked server

I have a linked server from Microsoft SQL 2008 to a DB2 server. Today when I tried to run a SELECT statement based on the linked server, I hit this error, "cannot create a column accessor for OLE DB provider "ibmdasql" for linked server". Earlier in the day, we had restarted the SQL Server Service. Running the following script on the 'affected' sql server should fix the issue. USE [master] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE PROC [dbo].[usp_enum_oledb_providers] AS exec sp_enum_oledb_providers GO sp_procoption 'usp_enum_oledb_providers', 'startup', 1 Restart the sql server service after running above script.