Ja, das ist eine GUID an sich, aber nicht die Name-based Variante.ewx hat geschrieben: ↑25.01.2024 11:30https://gist.github.com/larshp/e99d9dcd ... 048a52276b
https://answers.sap.com/questions/11928 ... -abap.html
damit bin ich leider immer noch nicht RFC4122 konform. Ich hab mir nun in Anlehnung an das von ewx erwähnte gist was gebaut, das soweit funktioniert (works for me :-) )a-dead-trousers hat geschrieben: ↑25.01.2024 10:58Wie gesagt: Nimm statt SHA1 den MD5 und schon hast du einen 32 Zeichen langen, "eindeutigen", Identifier. Die Formatierung XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX musst du sowieso selber machen, weil SAP, auch bei GUIDs die dem RFC entsprechen, die Bindestriche weglässt.
Code: Alles auswählen.
CLASS lcl_guid DEFINITION.
PUBLIC SECTION.
CLASS-METHODS gen_guid IMPORTING i_namespace TYPE sysuuid_x16
i_data TYPE string
RETURNING VALUE(r_guid) TYPE sysuuid_x16.
ENDCLASS.
CLASS lcl_guid IMPLEMENTATION.
METHOD gen_guid.
DATA hash TYPE x LENGTH 16.
DATA(xdata) = cl_abap_codepage=>convert_to( source = i_data ).
CONCATENATE i_namespace xdata INTO DATA(payload) IN BYTE MODE.
cl_abap_message_digest=>calculate_hash_for_raw( EXPORTING if_data = payload
IMPORTING ef_hashx = hash ).
" set Version to 5 (= SHA-1 based GUID)
SET BIT 1 OF hash+6(1) TO 0.
SET BIT 2 OF hash+6(1) TO 1.
SET BIT 3 OF hash+6(1) TO 0.
SET BIT 4 OF hash+6(1) TO 1.
SET BIT 1 OF hash+8(1) TO 1.
SET BIT 2 OF hash+8(1) TO 0.
r_guid = hash.
ENDMETHOD.
ENDCLASS.
The mechanisms or conventions used for allocating names and ensuring their uniqueness within their name spaces are beyond the scope of this specification.
Code: Alles auswählen.
package main
import (
"fmt"
"github.com/google/uuid"
)
const namespace_guid = "94DBC7F9-7280-1EEE-AEEC-354F9EBD9321"
func main() {
teststrings := []string{"Test", "123", "Täst", ":://?? öüÖÜ"}
namespace := uuid.MustParse(namespace_guid)
for _, v := range teststrings {
id := uuid.NewSHA1(namespace, []byte(v))
fmt.Println(v, "=>", id)
}
}