• דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

קוד SQL לבדיקת תקינות תעודת זהות

מתוזמן נעוץ נעול הועבר ארכיון code613m
2 פוסטים 2 כותבים 445 צפיות
    • מהישן לחדש
    • מהחדש לישן
    • הכי הרבה הצבעות
תגובה
  • תגובה כנושא
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • א מנותק
    א מנותק
    ארכיטקט
    כתב ב נערך לאחרונה על ידי
    #1

    מוגש כשירות לציבור שוחרי 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)

    אידיאולוגיות גדולות נכנסות למטחנה של עולם המעשה ויוצאות ממנו בפירורים (ווינסטון צ'רצ'יל, סתם סתם, זה שלי)

    תגובה 1 תגובה אחרונה
    4
  • S מנותק
    S מנותק
    softs
    כתב ב נערך לאחרונה על ידי
    #2

    תודה!
    אגב שורה 31 אם תמיד הערך הוא 9 ה LEN מיותר אפשר לשים ישר 8

    פורסם במקור בפורום CODE613 ב08/02/2015 01:09 (+02:00)

    תגובה 1 תגובה אחרונה
    0

  • התחברות

  • אין לך חשבון עדיין? הרשמה

  • התחברו או הירשמו כדי לחפש.
  • פוסט ראשון
    פוסט אחרון
0
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום