קוד SQL לבדיקת תקינות תעודת זהות
-
מוגש כשירות לציבור שוחרי SQL נקי:
USE [GlobalOptimum] GO /****** Object: UserDefinedFunction [dbo].[Validation_CheckIsraelID] Script Date: 08/02/2015 00:54:45 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: <Author,,Name> -- Create date: <Create Date, ,> -- Description: <Description, ,> -- ============================================= CREATE FUNCTION [dbo].[Validation_CheckIsraelID] ( -- בודק מספרי תעודת זהות מספר עמותה תיק ניכויים וכדומה כמקובל במדינת ישראל @id nvarchar(10) ) RETURNS bit AS BEGIN --אם אין אורך של תשע ספרות זה משבש טובא את כל השיעור ועל כן יחזיר אפס if len(@id)<>9 return 0; --הספרה הימנית היא ספרת הביקורת declare @ControlNumberByPass TinyInt = Right(@id,1) -- הספרות כולם למעט הימנית ביותר הן גוף המספר declare @NumberWithoutControl nvarchar(10) = left(@id,(len(@id)-1)) declare @ControlNumberByCheck TinyInt = 0; declare @strNum nvarchar(20) = ''; declare @i int = 1; --צובר את הספרות במכפלות לפי משקלים WHILE @i <= len(@NumberWithoutControl) begin set @strNum += cast(Cast(SUBSTRING(@NumberWithoutControl,@i,1) As TinyInt) * (case when @i%2 = 0 then 2 else 1 end) as nvarchar); set @i+=1; end set @i = 1; --מחבר את הספרות שנוצרו WHILE @i <= len(@strNum) begin set @ControlNumberByCheck += Cast(SUBSTRING(@strNum,@i,1) As TinyInt) set @i+=1; end --מעדכן למספר המשלים למכפלת עשר מדוייקת set @ControlNumberByCheck = (10 - (@ControlNumberByCheck%10)) --מחזיר ערך מאומת על פי בדיקה האם ספרת הביקורת מתאימה RETURN (case when @ControlNumberByCheck=@ControlNumberByPass then 1 else 0 end) END GO
פורסם במקור בפורום CODE613 ב08/02/2015 00:57 (+02:00)