3 Antworten anzeigen - 1 bis 3 (von insgesamt 3)
  • Autor
    Beiträge
  • #14981
    wendorff
    Participant

    Für Objekt-IDs stellt IQ-RM PRO 6.5 zwei verschiedene Darstellungsweisen des Objekt-ID zur Verfügung: 1.) Standard 11-stellige Repräsentation), XML 15-stellige Repräsentation. In der Darstellung kann dies konfiguriert werden, jedoch im XML findet sich ausschließlich die 15-stellige Repräsentation. Leider findet man jedoch häufig bei manueller Übertragung die Standard Objekt-ID Darstellung. Wie könne die beiden Darstellungsweisen ineinander konvertiert werden? Hat hierzu jemand schon Erfahrung gemacht bezüglich der Kodierung?
    Der Zahlen-Raum der beiden Darstellungsweisen ist zwar nicht identisch, jedoch in ähnlicher Größenordnung 34^11= 70.188.843.638.032.384 für die Standarddarstellung und 16^15 = 1.152.921.504.606.846.976 für die 15-stellige Darstellung. Somit sollte jede 11-stellige Darstellung eindeutig in eine 15-stellige Darstellung umzurechnen sein. Die XML Darstellung scheint eine unsigned Hexadezimalkodierung zu haben. Jedoch die Kodierung der Standarddarstellung schient exotischer Natur.

    #17022
    wendorff
    Participant

    Korrketur zum Zahlenraum:
    XML:15-stellig +“U“ = 16^14 = 72.057.594.037.927.936
    Standard: 11-stellig= 34^11 = 70.188.843.638.032.384

    Die von mir benutzte VBA-Routine zur Konvertierung der 15-stelligen XML ID in die Standard 11-stelligen Darstellung ist:

    Public Function Convert_XML_ID(ByVal XML_ID As String) As String
    ‚ Convert_XML_ID(„U6116B7E650D091“)
    ‚ convert the XML 15-digit Object ID into standard 11-digit object ID

    Dim S As String, temp As Variant, tmp As Variant, i As Long, lastI As Long
    Dim BaseSize As Variant
    Dim sNewBaseDigits As String

    sNewBaseDigits = „0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ“
    BaseSize = CDec(Len(sNewBaseDigits))

    If Left(XML_ID, 2) = „U5“ Then
    temp = CDec(„&H“ & Replace(XML_ID, „U“, „1“)) + CDec(104) ‚magic adaptation
    Else
    temp = CDec(„&H“ & Replace(XML_ID, „U“, „1“)) + CDec(108) ‚magic adaptation
    End If
    Do While Val(temp) <> 0
    tmp = CDec(temp)
    i = 0
    Do While tmp >= BaseSize
    i = i + 1
    tmp = CDec(CDec(tmp) / CDec(BaseSize))
    Loop
    If i <> lastI – 1 And lastI <> 0 Then S = S & String(lastI – i – 1, Left(sNewBaseDigits, 1)) ‚get the zero digits inside the number
    tmp = Int(tmp)
    S = S + Mid(sNewBaseDigits, tmp + 1, 1)
    temp = CDec(temp – tmp * (BaseSize ^ i))
    lastI = i
    Loop
    S = S & String(i, Left(sNewBaseDigits, 1)) ‚get the zero digits at the end of the number
    Convert_XML_ID = S
    End Function

    #17023
    Hans Meidinger
    Participant

    Hallo,
    die Darstellung der Identities in IQ-Fmea ist geknüpft an intern verwendete Algorithmen, die nicht öffentlich dokumentiert sind. Das ist auch deshalb so, weil diese Algorithmen u.U. von uns geändert werden müssen. Wenn für Ihre Problemlösung keine andere Möglichkeit besteht als diese Algorithmen nach dem selben Muster zu programmieren, dann bitte ich Sie mir eine Email mit Hinweis zu diesem Thema und meinen Namen an unseren Support zu senden. Ich werde Ihnen dann eine Pseudecode-Beschreibung zusenden. Diese ist allerdings nicht offiziell und ohne Gewährleistung, da die Implementierung wie erwähnt von uns geändert werden kann.

3 Antworten anzeigen - 1 bis 3 (von insgesamt 3)
  • Sie müssen angemeldet sein, um zu diesem Thema eine Antwort verfassen zu können.