Feedback

C# - IBAN Checksumme prüfen

Veröffentlicht von am 20.12.2013
(0 Bewertungen)
Mit diesem Snippet kann man eine IBAN überprüfen, ob die Checksumme bzw. Prüfsumme für diese IBAN korrekt ist.

Aufruf:
MyExtensions.IbanChecksumCheck("DE68 2105 0170 0012 3456 78");

oder
"DE68 2105 0170 0012 3456 78".IbanChecksumCheck();
public static class MyExtensions
{
 /// <summary>
 /// Bestimmt ob die Checksumme einer IBAN gültig ist
 /// </summary>
 /// <param name="iban">Der zu prüfende IBAN (z.B: "DE68 2105 0170 0012 3456 78")</param>
 /// <returns><c>True</c>, wenn <paramref name="value"/> gültig ist. Andernfalls <c>False</c>.</returns>
	public static bool IbanChecksumCheck(this string iban)
	{
		string ibanCleared = iban.ToUpper().Replace(" ","").Replace("-","");
		string ibanSwapped = ibanCleared.Substring(4)+ibanCleared.Substring(0,4);
		string sum = ibanSwapped.Aggregate("", (current, c) => current + (char.IsLetter(c) ? (c - 55).ToString() : c.ToString()));

		var d = decimal.Parse(sum);
		return ((d % 97) == 1);
	}
}
Abgelegt unter IBAN, Prüfsumme, Checksumme.

1 Kommentare zum Snippet

Jan Welker schrieb am 07.09.2021:
Hier eine Übersetzung in T-SQL von Andreas Henke, danke dafür!


/****** Object: UserDefinedFunction [dbo].[checkIban] Script Date: 07.09.2021 13:54:23 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

-- =============================================
-- Author: Andreas Henke
-- Create Date: 07.09.2021
-- Description: Berechnung der Prüfziffer für IBAN
-- =============================================
CREATE FUNCTION [dbo].[checkIban]
(
@iban nvarchar(50)
)
RETURNS bit
AS
BEGIN
-- Declare the return variable here
DECLARE @result bit

--tribute to pocki_c at https://dotnet-snippets.de/snippet/iban-checksumme-pruefen/3809
DECLARE @ibanCleared nvarchar(22)
set @ibanCleared = Replace(Replace(Upper(@iban),' ',''),'-','');

Declare @ibanSwapped nvarchar(24)
Set @ibanSwapped = Substring(@ibanCleared,5,18)+Convert(nvarchar(2),ASCII(Substring(@ibancleared,1,1))-55)+Convert(nvarchar(2),ASCII(Substring(@ibancleared,2,1))-55)+'00'

Declare @d decimal(24,0)
set @d= TRY_CAST(@ibanSwapped as decimal(24,0))

SELECT @result = case when (98-(@d % 97) = TRY_CAST(Substring(@ibanCleared,3,2) as decimal(2,0))) then 1 else 0 end

RETURN @result
END
GO
 

Logge dich ein, um hier zu kommentieren!